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

10-11 23:07
查看更多