在 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/