在 C++ 中实现多态行为时,可以使用纯虚方法,也可以使用函数指针(或函子)。例如,可以通过以下方式实现异步回调:
方法一
class Callback
{
public:
Callback();
~Callback();
void go();
protected:
virtual void doGo() = 0;
};
//Constructor and Destructor
void Callback::go()
{
doGo();
}
所以要在这里使用回调,你需要重写 doGo() 方法来调用你想要的任何函数
方法二
typedef void (CallbackFunction*)(void*)
class Callback
{
public:
Callback(CallbackFunction* func, void* param);
~Callback();
void go();
private:
CallbackFunction* iFunc;
void* iParam;
};
Callback::Callback(CallbackFunction* func, void* param) :
iFunc(func),
iParam(param)
{}
//Destructor
void go()
{
(*iFunc)(iParam);
}
要在此处使用回调方法,您需要创建一个回调对象调用的函数指针。
方法 3
[这是我(安德烈亚斯)添加到问题中的;不是原海报写的】
template <typename T>
class Callback
{
public:
Callback() {}
~Callback() {}
void go() {
T t; t();
}
};
class CallbackTest
{
public:
void operator()() { cout << "Test"; }
};
int main()
{
Callback<CallbackTest> test;
test.go();
}
每种实现的优点和缺点是什么?