【发布时间】:2014-04-13 21:31:00
【问题描述】:
在我的 C++ 代码中,我依赖于 C 库。这个 C 库让我可以定义一个带有 3 个参数的回调。示例:
文件.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*。
标签: c++ c static callback extern