c++ - 如何使用 std::function 作为 C 风格的回调

标签 c++ c++11 callback

如何在需要 C 风格回调的函数中使用 std::function

如果这是不可能的,那么下一个最好的事情是什么?

例子:

// --- 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?
}

最佳答案

在大多数情况下你不能。

但是当您在 std::function 中存储 C 风格的回调时,您可以使用 target()成员函数。

关于c++ - 如何使用 std::function 作为 C 风格的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20290476/

相关文章:

c++ - 为什么 decltype 将变量定义为引用?

Android:使用 WebView 组件进行回调?

c++ - 在C++中使用模板成员函数继承模板类

c++ - Json::Value 返回时会发生变化吗?

c++ - g++ 不允许在 lambda 中通过引用广义捕获 const 对象?

c++ - 我正在尝试在 C++ 中制作一个介于 5 和 8 之间的随机数生成器

c - 使用回调和嵌套列表的 C 前缀表达式计算器

javascript - jQuery 回调仅在某种程度上执行

python - 使用 python 编译 pin 工具时出错,出现错误 C2872 : 'UINT32' : ambiguous symbol

c++ - 取消引用超出范围的 vector 迭代器 - 发生了什么,为什么?