因为一直做底层的缘故,一直对回调函数的使用只限与C。但现在开始使用C++开始编程的时候,发现实现回调比较困难,因为要传入的函数必须是静态的。本来使用C++就是为了使用其面向对象的特性。但是要现在这样使用回调,感觉又走入了以前的老路。
这是我使用C方式实现的函数指针:
#include <iostream>
using namespace std;
typedef void (*pFunction)(void);
void sample()
{
cout<<"this is sample"<<endl;
}
int main() {
pFunction pfuc = &sample;
pfuc();
return 0;
}
直到我在网上看到一篇文章,才真正的学习到什么是真正的面向对象编程啊。真的收获多多啊,直接上代码:
这个是接口,相当与C中的回调函数的定义:
class ICallBackFunction {
public:
ICallBackFunction();
virtual ~ICallBackFunction();
virtual void samleFunction();
};
这个是对接口的实现,相当于C代码中的sample()函数。
class SampleCallBack: public ICallBackFunction {
public:
SampleCallBack();
virtual ~SampleCallBack();
void samleFunction();
};
class CAppDemo {
public:
CAppDemo(ICallBackFunction *hnd);
virtual ~CAppDemo();
void test()
{
if(pfunc != NULL)
pfunc->samleFunction();
}
private:
ICallBackFunction *pfunc;
};
从上面的例子中可以看到两种完全不同的实现方式。让我这个面向对象新手真的获益匪浅啊