0

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

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

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

编辑:

为简单起见,可以假设回调的签名是无效的(*f)(void*, int*, int*)

哦,它必须是 C++-03

4

1 回答 1

3

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

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 是我发现的唯一一种),您的(便携式)运气不佳。

于 2012-12-10T04:19:54.823 回答