1、在这里设:回调函数为A()(这是最简单的情况,不带参数,但我们应用的实际情况常常很会复杂),使用回调函数的操作函数为B(), 但B函数是需要参数的,这个参数就是指向函数A的地址变量,这个变量一般就是函数指针。使用方法为:
| int A(char *p); // 回调函数 typedef int(*CallBack)(char *p) ; // 声明CallBack 类型的函数指针 CallBack myCallBack ; // 声明函数指针变量 myCallBack = A; // 得到了函数A的地址 |
B函数一般会写为 B(CallBack lpCall,char * P,........); // 此处省略了p后的参数形式 。
所以回调机制可解为,函数B要完成一定功能,但他自己是无法实现全部功能的。 需要借助于函数A来完成,也就是回调函数。B的实现为:
| B(CallBack lpCall,char *pProvide) { ........... // B 的自己实现功能语句 lpCall(PpProvide); // 借助回调完成的功能 ,也就是A函数来处理的。 ........... // B 的自己实现功能语句 } // -------------- 使用例子 ------------- char *p = "hello!"; CallBack myCallBack ; myCallBack = A ; B(A, p); |
以上就是回调的基本应用,本文所说的变身,其实是利用传入不同的函数地址,实现调用者类与回调函数所在类的不同转换。
1、问题描述
CUploadFile 类完成数据上传,与相应的界面进度显示。
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 大法 使用 函数 // 功能 CallBack 实现 char 完成 参数 |
注册
个人空间
