c++ - 当 API 请求函数指针时使用函数对象

标签 c++ c function-pointers function-object

我想从 C++ 调用 C API。 API 需要一个函数指针,但对我来说,功能是在 C++ 函数对象中实现的,因为它有状态。

事实上,所需的功能分为两个函数对象。 C api 需要一个具有两个指针参数的函数,用于返回每个函数对象返回的两个东西。

除了定义全局函数之外,还有什么方法可以使用 C 中的函数对象。例如,可以将它重新解释为函数指针吗?

编辑:

为简单起见,假设回调的签名为 void (*f)(void*, int*, int*)

哦,它必须是 C++-03

最佳答案

大多数 API 允许您通过空指针传递某种用户状态。你可以通过那里传递一个指向你的对象的指针:

struct my_obj
{
    void operator()(int*, int*) {}

    static void forwarder(void *state, int *x, int *y) { (*(my_obj*)state)(x, y); }
};

void install_fn(void (*)(void*,int*,int*), void *state);

my_obj obj;
install_fn(my_obj::forwarder, &obj);

对于不允许您传递任何状态的 API(GLUT 是我发现的唯一想到的 API 之一),您的(可移植)运气不佳。

关于c++ - 当 API 请求函数指针时使用函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794908/

相关文章:

c++ - 通过引用传递 vector - 段错误 C++

c++ - 如何使用C++以相反的顺序读取文件

c - 指向空函数的指针

c++ - 理解QT的图形 View 坐标系

c++ - cuda 多重图像侵 eclipse 不起作用

Coverity和 "Failed to initialize ICU, try using the --prevent-root option"

c - 为什么 setjmp/longjmp 在 MSVC 上崩溃,而在 MinGW 中却没有?

c - 为什么我要 free() 一个由 malloc() 分配的对象?

java - 将 getter/setter 作为方法引用传递

c - 是否有 typedef 函数指针的替代语法?