在 C 代码中使用 boost::bind() 会起作用吗?
我可以在 C 代码中使用 boost::bind(mycallback, this, _1, _2)
吗?
更新
简短的回答是否,boost bind不会返回可以在C代码中调用的函数指针,而是返回一个函子(C++具有重载 ()
运算符的对象)请参阅下面的答案。
Can I use boost::bind(mycallback, this, _1, _2)
across C code?
Update
The short answer is no, boost bind does not return a function pointer, which can be called in C code, but a functor (C++ object with overloaded ()
operator) see answer below.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
完成您想做的事情的最佳方法是创建一个 C 回调,然后调用 boost::function,该函数使用 new 存储在某种用户内存中。
示例:
然后您只需传递此回调并将用户数据(但在 libev 中指定)设置为用 new 分配的函数的副本。
这是使用 libev 指定用户数据的方式:
http://pod.tst.eu/http ://cvs.schmorp.de/libev/ev.pod#ASSOCIATING_CUSTOM_DATA_WITH_A_WATCH
The best way to do what you want to do is to create a C callback that then calls the boost::function, which is stored in some sort of user memory with new.
Example:
Then you simply pass this callback and set the user data(however it is specified in libev) to be a copy of your function allocated with new.
This is how you specify user data with libev:
http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#ASSOCIATING_CUSTOM_DATA_WITH_A_WATCH
不。
boost::bind
返回一个Functor,而不是函数指针。返回的对象是一个 C++ 对象,它具有重载的operator(),这使得它的行为类似于 C++ 代码中的函数指针。但它不是可以传递到 C 代码中的函数指针。No.
boost::bind
returns a Functor not a function pointer. The returned object is a C++ object which has an overloadedoperator()
which allows it to behave like a function pointer in C++ code. But it is not a function pointer which can be passed into C code.我假设您想使用
boost::bind
返回的任何内容作为 C 库的回调函数?如果是这样的话,那就不行了。它甚至不会构建,因为 boost::bind 不返回函数指针。
I assume you want to use whatever
boost::bind
returns as a callback function for a C library?If that's the case, then no, it won't work. It won't even build, as
boost::bind
does not return a function pointer.