1

考虑一个库函数

registerCallback(int event_type, void(*handler)())

它为某种事件注册了一个处理程序。我想使用这个函数注册几个处理程序,但要包含一个“范围”。一个例子是一个包装函数,如

registerCallback2(int event_type, void* arg, void(*handler)(void*)

这允许注册接收附加参数的处理程序。

我尝试使用 lambda 表达式,但很快了解到捕获某些内容的 lambda 表达式不能转换为函数指针,也不能是类方法,因此 Class 包装器似乎不能正常工作。

您是否知道如何以线程安全的方式解决此问题(可以从多个线程同时调用)?该示例应适用于 GCC 4.7.2 和 Linux。

4

1 回答 1

-1

我使用 boost::function 做了类似的事情来启用回调。您可以将共享弱指针传递给您的寄存器,然后在调用它之前验证指针是否仍然有效。

我的电话看起来像这样:

register_callback(EventManager::EVENT_IDENTIFIER, boost::bind(&MyClass::myCallback, this, _1))

编辑:在这个 register_callback 函数中(你的 registerCallback2 是你的),你可以调用库的 registerCallback,以便可以处理范围。

于 2013-10-21T13:32:37.053 回答