考虑库函数
registerCallback(int event_type, void(*handler)())
为某种事件注册处理程序。我想使用此函数注册多个处理程序,但包含一个“范围”。一个例子是像
这样的包装函数 registerCallback2(int event_type, void* arg, void(*handler)(void*)
可以注册接收附加参数的处理程序。
我尝试使用lambda表达式,但很快就知道捕获某些东西的lambda表达式无法转换为函数指针,也不能成为类方法,所以Class包装器似乎不能正常工作。
您是否知道如何以线程安全的方式解决这个问题(可以从多个线程同时调用)?该示例应与GCC 4.7.2和Linux一起使用。
答案 0 :(得分:-1)
我使用boost :: function来启用回调。你可以将一个共享的弱指针传递给你的寄存器,在调用之前,验证指针是否仍然有效。
我的电话如下:
register_callback(EventManager::EVENT_IDENTIFIER, boost::bind(&MyClass::myCallback, this, _1))
编辑: 在这个register_callback函数中(带有registerCallback2),你可以调用库的registerCallback,这样就可以处理范围了。