我有一個C庫,需要一個回調函數被註冊來定製一些處理。回調函數的類型是int a(int *, int *)
。使用C++類的成員函數爲C回調函數
我寫類似以下內容並嘗試註冊一個C++類的函數作爲回調函數的C++代碼:
class A {
public:
A();
~A();
int e(int *k, int *j);
};
A::A()
{
register_with_library(e)
}
int
A::e(int *k, int *e)
{
return 0;
}
A::~A()
{
}
編譯器會引發以下錯誤:
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
我的問題:
- ,首先是有可能像我試圖做註冊一個C++類memeber功能,如果SO 3 H流? (我讀32.8在http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html,但在我看來,這並沒有解決問題)
- 是否有替代/更好的辦法來解決呢?
是的。該解決方案工作。 (A ::)(A *,int *,int *)'不匹配'int()(int,int *)' – Methos 2009-06-16 10:31:20
它確實存在,但是通過將(答::)這意味着函數是類A的一部分,它從那裏暗示了'this'指針。 – GManNickG 2009-06-16 10:37:19
我只是好奇......這是在標準中指定的嗎?我只是看了一下關於課程的部分,並沒有發現這一點。儘管如此,非常有趣。我只是不會認爲每個編譯器都必須以這種方式處理非靜態成員函數。 – Tom 2009-06-16 10:59:37