在我的C++代码中,我对C库有一个依赖关系。这个C库让我用3个参数定义一个回调函数。例如:C++静态成员函数作为C回调需要访问非静态引用
file.c:
#ifdef __cplusplus
extern "C"{
#endif
typedef void(*callback)(argument* 1, argument* 2, argument* 3);
...
void set_callback(ARG1, callback name_of_callback);
...
在C++库我开发我想此回调是一个类的成员函数,因为我不能直接传递一个成员函数作为回调C库我创建了一个静态函数作为回调函数,在这个静态函数中,我想引用一个类对象并调用它的成员函数来完成这个工作。
现在我的问题是,我的静态函数需要有C库指定的3个参数,所以我没有找到一种方法来引用我在该静态函数内开发的类的对象。我举例想做的事:
MyClass.h:
class MyClass:
public:
MyClass();
void my_function(argument*1, argument* 2, argument* 3);
static void my_callback(argument* 1, argument* 2, argument*3);
MyClass.cpp:
MyClass::MyClass(){
set_callback(ARG1, my_callback);
}
void MyClass::my_function(argument*1, argument* 2, argument* 3){
/* Do something */}
void MyClass::my_callback(argument* 1, argument* 2, argument*3){
Object->my_function(1, 2, 3);
}
之所以不设置类成员为静态的是,我希望能够创建和销毁此类的对象用于测试目的并控制测试中对象的状态。
我正在使用g ++和gcc,希望有人可以提供一些帮助。 在此先感谢。
它看起来像你的'set_callback'调用提供了稍后传递给回调的参数之一?通过该参数传递你的'MyClass *'。 –