我想在C++中实现一个带回调的类。 我认为我需要一个具有两个参数的方法:
目标对象 (例如 myObj) 和指向目标对象成员函数的指针(这样我可以执行 *myObj->memberFunc(); )。
条件如下:
- myObj 可以是任何类。 - 将作为回调函数的成员函数是非静态的。
我一直在研究这个问题,但好像我需要事先知道 myObj 的类。 但我不确定该怎么做。 在C ++中是否可能实现这一点?
以下是我考虑过的,但肯定不正确的代码。
目标对象 (例如 myObj) 和指向目标对象成员函数的指针(这样我可以执行 *myObj->memberFunc(); )。
条件如下:
- myObj 可以是任何类。 - 将作为回调函数的成员函数是非静态的。
我一直在研究这个问题,但好像我需要事先知道 myObj 的类。 但我不确定该怎么做。 在C ++中是否可能实现这一点?
以下是我考虑过的,但肯定不正确的代码。
class MyClassWithCallback{
public
void *targetObj;
void (*callback)(int number);
void setCallback(void *myObj, void(*callbackPtr)(int number)){
targetObj = myObj;
callback = callbackPtr;
};
void callCallback(int a){
(myObj)->ptr(a);
};
};
class Target{
public
int res;
void doSomething(int a){//so something here. This is gonna be the callback function};
};
int main(){
Target myTarget;
MyClassWithCallback myCaller;
myCaller.setCallback((void *)&myTarget, &doSomething);
}
感激任何帮助。
谢谢。
更新 大部分人都说是观察和委托,这正是我在寻找的,我有点儿Objective-C/Cocoa的思路。 我的当前实现是使用具有虚函数的接口。我想只传递对象和成员函数指针(像boost一样)可能更“聪明”,而不是定义一个接口。但似乎每个人都认为接口是最简单的方法?Boost似乎是个好主意(假设已经安装)。
function
和bind
而不是接口会更简单、更清晰。另外请注意,如果您使用的是最近版本的gcc,则已经具备了function
和bind
功能,因此无需使用boost库。使用function/bind是函数式编程模式,而使用接口则更多地使用“标准”设计模式,其含义不同。 - Artyom