您的位置:首页 > 编程语言 > C语言/C++

C++ 回调机制

2016-02-20 20:32 351 查看

回调函数

回调机制,函数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】/article/7672382.html

【3】/article/4657059.html

【4】/article/9513550.html

【5】/article/2257802.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: