【发布时间】:2013-11-17 23:09:53
【问题描述】:
我有 2 个类,我想通过回调将一个方法从一个传递到另一个!
看到我也希望使用 void (*callBack)(); 来保存这个方法的地址
我习惯用C做这个,但我不知道如何用c++做这个;
#include <iostream>
using namespace std;
class A
{
private:
void (*callBack)(); //to hold the address of the method
public:
A();
void setCallBack(void(*cB)());
void useCallBack();
};
A::A()
{
}
void A::setCallBack(void(*cB)())
{
callBack = cB;
}
void A::useCallBack()
{
callBack();
}
class B
{
private:
A * Aguy;
public:
B();
void someMethod();
void otherMethod();
};
B::B()
{
Aguy = new A();
}
void B::otherMethod()
{
Aguy->setCallBack(someMethod);
Aguy->useCallBack()
}
void B::someMethod()
{
cout << "Hello. I'm from class b" << endl;
}
int main()
{
B Bguy;
Bguy.otherMethod();
return 0;
}
【问题讨论】:
-
在 C++ 中看到回调函数并不常见。您通常使用虚拟方法定义接口。然后传递一个实现接口的对象。然后您的对象可以使用接口对象。如果你真的想要回调函数,那么
std::function<>提供了一个围绕泛型函数的抽象方法,包括函数/方法/仿函数。
标签: c++ class methods callback