在C代码中使用boost :: bind(),它会起作用吗?

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