uni*_*n83 5 c c++ boost boost-bind libev
我可以boost::bind(mycallback, this, _1, _2)跨C代码使用吗?
更新
简短的回答是否定的,boost bind不会返回一个函数指针,它可以在C代码中调用,但是一个函子(带有重载()运算符的C++对象)请参见下面的答案.
小智 4
完成您想做的事情的最佳方法是创建一个 C 回调,然后调用 boost::function,该函数使用 new 存储在某种用户内存中。
例子:
void callFunction(void* data)
{
boost::function<void(void)> *func = (boost::function<void(void)>* ) (data);
(*func)();
delete(func);
}
Run Code Online (Sandbox Code Playgroud)
然后,您只需传递此回调并将用户数据(但在 libev 中指定)设置为用 new 分配的函数的副本。
这是使用 libev 指定用户数据的方式: http://pod.tst.eu/http: //cvs.schmorp.de/libev/ev.pod#ASSOCIATING_CUSTOM_DATA_WITH_A_WATCH