在 C++ 中对类进行回调的最干净的方法是什么?
我通常创建如下函数:
void registerCallback(void(*callback)(void* param), void* param);
然后这样调用它:
foo->registerCallback(callbackStatic, this);
然后我在类中添加一个静态函数,如下所示:
static void callbackStatic(void* param)
{
((Type*)(param))->callback();
}
它有效,但是很痛苦。我必须为每个回调创建两个函数。如果我可以使用 C++11,我会改用 lambda。 Qt 有一个非常好的信号和槽机制,但需要一个特殊的预编译器。
我正在编写一个库,所以我希望尽可能降低要求。没有 C++11,没有 boost,等等。有没有办法只使用 C++03 构建一个 lambda 或信号/槽“类似”回调系统?
最佳答案
如果您能够从头开始,我建议您不要在 C++ 中使用回调函数。相反,使用对象。
struct CallbackHandler { virtual void doit() = 0; };
void registerCallback(Callbackhandler* handler);
然后
struct MyCallbackHandler : public CallbackHandler { ... };
registerCallback(new MyCallbackHandler());
关于c++ - 在没有 C++11 的情况下用 C++ 进行回调的最干净的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39537686/