C++ 回调机制
来源:互联网 发布:考勤软件 编辑:程序博客网 时间:2024/06/06 12:28
回调函数
回调机制,函数A的形参包含一个函数指针,函数B传入函数A中。在函数A的函数体中,满足了一定的条件后调用函数B的过程,就是回调机制。而函数B就是回调函数。
回调函数的使用场景?某函数在某个时间或者某个事件下执行,但是确定的时间我不知道,只知道会调用这个函数,那么可以使用回调函数。它被触发可能是时间或者时间或者是中断等,会有一个消息通知,来告知回调函数执行相应的操作。
函数指针
void func(int a, int b); //函数原型void (*fun)(int a, int b); //函数指针typedef void (*func)(int a, int b); //func代表void func(int, int)
函数返回类型和参数类型一致,那么不同的函数可以完成不同的操作。这也是回调函数的一个函数,可以对应不同的实现。如:
#include <iostream>typedef int (*Func)(int, int);int minNum(int vNumA, int vNumB){ return vNumA < vNumB ? vNumA : vNumB;}int maxNum(int vNumA, int vNumB){ return vNumA > vNumB ? vNumA : vNumB;}int main(){ Func pFunc = minNum; //Func pFunc = maxNum; std::cout << pFunc(1, 2) << std::endl; return 1;}
非静态成员函数
回调函数需要是全局函数或者静态函数,而不能是成员函数,因为成员函数的对象含有this指针,当传入成员函数时,this指针也被传入,造成参数不匹配。解决方法是形参多一个函数对象指针,把具体的对象传进去。
class CCallback{public: void Func(int a) { std::cout<<"member function callback called with para="<<a<<std::endl; }};typedef void (CCallback::*pMemberFunc)(int);void Caller(CCallback* pObj,pMemberFunc p){ (pObj->*p)(1);}int main(int argc, char* argv[]){ CCallback obj; Caller(&obj,&CCallback::Func);}
参考资料
【1】https://www.zhihu.com/question/19801131
【2】http://blog.csdn.net/pi9nc/article/details/9297593
【3】http://www.cnblogs.com/qq78292959/archive/2012/10/10/2719155.html
【4】http://blog.csdn.net/xie1xiao1jun/article/details/8262902
【5】http://blog.csdn.net/ebowtang/article/details/43065277
0 0
- objective-C回调机制总结
- Objective-C语言:回调机制
- Objective-C中的多种回调机制
- C++Windows编程之回调机制
- 【C++】bind+function的回调机制
- Objective-C回调机制(delegate, protocol)
- 细数Objective-C中的回调机制
- 细数Objective-C中的回调机制
- 细数Objective-C中的回调机制
- 细数Objective-C中的回调机制
- 细数Objective-C中的回调机制
- Objective-C回调机制(delegate, protocol)
- 细数Objective-C中的回调机制
- 细数Objective-C中的回调机制
- Objective-C回调机制(delegate, protocol)
- 细数Objective-C中的回调机制
- 细数Objective-C中的回调机制
- 细数Objective-C中的回调机制
- React+Native Unable to download JS Bundle解决办法
- 七步理解深度学习
- 78. Subsets
- eclipse不编译
- CSS padding margin输入不同值个数的效果详解
- C++ 回调机制
- java.io.FileWriter class doesn’t use UTF-8 by default
- 51单片机入门之四:静态数码管
- JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) ) http://www.open-open.com/lib/view/open1432200119489.html
- 委托
- [C++]类模板
- 字符串scanf,getchar,gets,printf,putchar输入输出小测试
- Maven 清晰介绍版
- 袁先生——安卓之路