如何在需要C风格回调的函数中使用std ::函数?
如果不可能,下一件最好的事情是什么?
例:
// --- some C code I can not change --- typedef void(*fun)(int); void register_callback(fun f) { f(42); // a test } // ------------------------------------ #include <functional> #include <iostream> void foo(const char* ptr,int v,float x) { std::cout << ptr << " " << v << " " << x << std::endl; } int main() { std::function<void(int)> myf = std::bind(&foo,"test",std::placeholders::_1,3.f); register_callback(myf); // <-- How to do this? }
解决方法
长答案:您可以编写一个C函数传递给调用您的std ::函数的API:
// --- some C code I can not change --- typedef void(*fun)(int); void register_callback(fun f) { f(42); // a test } // ------------------------------------ #include <functional> #include <iostream> void foo(const char* ptr,float x) { std::cout << ptr << " " << v << " " << x << std::endl; } namespace { std::function<void(int)> callback; extern "C" void wrapper(int i) { callback(i); } } int main() { callback = std::bind(&foo,3.f); register_callback(wrapper); // <-- How to do this? }
原文地址:https://www.jb51.cc/c/113716.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。