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

发布于 2024-12-17 23:28:11 字数 223 浏览 3 评论 0原文

我可以在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鸩远一方 2024-12-24 23:28:11

完成您想做的事情的最佳方法是创建一个 C 回调,然后调用 boost::function,该函数使用 new 存储在某种用户内存中。

示例:

void callFunction(void* data)
{

   boost::function<void(void)> *func = (boost::function<void(void)>* ) (data);
   (*func)();
   delete(func);
}

然后您只需传递此回调并将用户数据(但在 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:

void callFunction(void* data)
{

   boost::function<void(void)> *func = (boost::function<void(void)>* ) (data);
   (*func)();
   delete(func);
}

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

萌辣 2024-12-24 23:28:11

不。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 overloaded operator() 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.

听你说爱我 2024-12-24 23:28:11

我假设您想使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文