加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何使用std ::函数作为C风格的回调

发布时间:2020-12-16 05:48:27 所属栏目:百科 来源:网络整理
导读:如何在需要C风格回调的函数中使用std ::函数? 如果不可能,下一件最好的事情是什么? 例: // --- some C code I can not change ---typedef void(*fun)(int);void register_callback(fun f) { f(42); // a test}// ------------------------------------#in
如何在需要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?
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读