c++ - 在没有 C++11 的情况下用 C++ 进行回调的最干净的方法?

标签 c++ callback c++03

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

相关文章:

c# - C# 默认使用的 RSA 算法是什么,它在 Crypto++ 中的合适参数是什么?

javascript - jQuery $.Deferred 与 window.top.postMessage()

c++ - 将 void 替换为模板方法的参数

c++03 初始化具有多个参数的对象数组

c++ - 如何在对象容器中搜索数据成员值?

c++ - 为什么 Windows 上的 sys/types.h 中没有定义 S_IRWXG 和 S_IRWXO?

c++ - iMac 上的 OpenMP 'slower'? (C++)

javascript - JS、多个JSON请求和回调函数

c++ - Qt3D QAbstractTextureImage 像素化

ruby-on-rails - rails/ ruby : Self-referential association using dependent: :destroy causing duplicate callbacks