如何在函数指针中包含范围

时间:2013-10-21 13:25:09

标签: c++ lambda scope function-pointers

考虑库函数

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

为某种事件注册处理程序。我想使用此函数注册多个处理程序,但包含一个“范围”。一个例子是像

这样的包装函数

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

可以注册接收附加参数的处理程序。

我尝试使用lambda表达式,但很快就知道捕获某些东西的lambda表达式无法转换为函数指针,也不能成为类方法,所以Class包装器似乎不能正常工作。

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

1 个答案:

答案 0 :(得分:-1)

我使用boost :: function来启用回调。你可以将一个共享的弱指针传递给你的寄存器,在调用之前,验证指针是否仍然有效。

我的电话如下:

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

编辑: 在这个register_callback函数中(带有registerCallback2),你可以调用库的registerCallback,这样就可以处理范围了。