在我的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 *'。 –