Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20572
  • 博文数量: 11
  • 博客积分: 560
  • 博客等级: 中士
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-26 11:42
文章分类
文章存档

2011年(1)

2008年(10)

我的朋友
最近访客

分类: C/C++

2008-03-26 16:11:04

1 回调函数技术

回调函数的实现就是函数指针,定义一组函数,它们有相同的参数类型与返回值,然后通过函数指针的方法对他们进行操作,这就构成了回调函数。常见的有linux内核驱动中的read write等系统调用,它们的实现都不一样,但是接口都一样,上层调用时内核会自动根据设备类型通过函数指针的形式调用他们。     

使用到的编程技术:
函数指针的定义方法
int func(int a,int b,int c);
int (*fp)(int ,int ,int) ;//定义一个函数指针,
fp=func;//这个函数指针可以指向有相同参数与返回值的函数,注意两个相同
 
回调函数的使用场合
1。有一组功能相近的函数,它们接口参数相差不大并且想方便的扩展接口,提高程序灵活性,这种典型的是内核中文件操作接口(如read)对外提供一个统一的READ接口,内核实现时根据不同的文件类型调用不同驱动的read函数
2   想封装类或库的具体实现,但是还想让用户可以自己定制一部分操作,提高程序的灵活性 ,  这种可以看unix下的信号处理或是线程函数,  信号处理定义了一个统一接口,接口具体实现由用户决定, 当存在特定事件时由系统调用用户回调

可见回调是在当某些接口或是操作没有确定下来时解决问题的一种好方法, 它提供灵活的机制让用户可以方便的增加、修改某些接口而不必对代码做太大修改

第一种也可以使用switch实现,但是使用回调让代码看起来更简洁, 并且新功能添加更容易 如果一组操作参数差别比较大的话,  使用那么switch会更方便,  因为不必为每个函数都定义多余的参数
 
优点:  灵活, 可以方便的扩充或是给用户提供自己实现策略
缺点: 对第二种, 用户的不良代码会影响整个系统稳定性
对第一种, 如果接口参数相差比较大的话,那么会传入过多无用参数, 影响对程序理解

适用于想让用户提供定制方法或是接口参数相近,想方便扩展功能而不必修改过多代码的场合
阅读(492) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:关于gcc中字节对齐的问题

给主人留下些什么吧!~~