gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:00 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com