我想从 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/