前言
在以前的blog中,我们探讨过C++类与回调函数链接。当时讨论的结果是用C++11的function和bind来实现成员函数的回调。但是如果不用C++11,又应该用什么办法实现呢?
简单说明
成员函数作为回调函数的最大问题就是有一个隐式的this指针,所以我们的解决办法就是获取到this指针,按照这个思路,我们在写回调函数的形参的时候,传入一个this指针就可以了。话不多说,直接看代码。
#include <iostream>
#include <functional>
typedef void (*funCB )(void *);
class B
{
public:
void runCB(funCB cb, void *arg) {
std::cout << "runCB" << std::endl;
cb(arg);
}
};
class C
{
public:
void Cfun() { std::cout << "in Cfun" << std::endl; }
};
void CB(void *arg)
{
((C *)arg)->Cfun();
}
int main()
{
B b;
C c;
b.runCB(CB, &c);
return 0;
}
在代码中,在B::funCB中,通过CB函数调用了C::Cfun,其实就是用C的成员函数(Cfun)作为了B的回调函数。
与我联系
欢迎关注我的公众号:
最近把上传的这些资源放到了公众号中,后台回复“免费资源下载”,即可获取到下载链接。