gpt4 book ai didi

c++ - 从 C 回调调用 C++ 方法

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:38 28 4
gpt4 key购买 nike

我正在将 C 库用于 C++ 项目。这个库允许我注册一个 C 回调,在这个回调中我应该调用一个对象的 C++ 方法。

情况是这样的:

我的类.h

class myclass
{
public:
myclass();
void callme();
};


extern "C"
{
void init():
int callback(int,int);
}

我的类.cpp

myclass::myclass()
{
init();
}

void myclass::callme()
{
cout<<"Ok\n";
}

extern "C"
{
void init()
{
//code

setlibraryCallback(callback);

//code
}


int callback(/*some arguments that I can't change*/ int a, int b)
{
//I should call "callme()" methos of my c++ object
}
}

我可以从这个 C 回调中调用 C++ 方法吗?如果是,我该怎么办?谢谢

编辑:我发现了这个类似的问题 How to call a C++ method from C?但是,我无法将对象作为 void 指针传递给 C 回调,因为我无法更改回调参数。

最佳答案

库通常允许您提供一个 void * 值作为“上下文”,然后将其传递给回调。如果库不提供该功能(嗯?),您可以使用线程局部变量(在单线程程序中也称为全局变量)。

这就是代码通常的样子。

class A {
public:
static void static_callback(void * ctx) {
static_cast<A*>(ctx)->callback();
}
void callback();
};

extern void library_function(void (*callback)(void *), void * ctx);

int main()
{
A a;
library_function(&A::static_callback, &a);
}

关于c++ - 从 C 回调调用 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853915/

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