Problem 65 怎樣表示指向結構體或類的成員函數的指針?
Ans:
要想通過函數指針引用一個結構體或類的成員函數,然後通過該指針來調用該成員函數,如何表示呢?
示例如下:
假設有如下一個結構體定義如下:
struct X {
int Foo(int a)
{
cout<<"This is a test"<<endl;
}
};
在程序中,我們通過會通過函數指針來設置回調函數,只不過,這次我們要指向一個結構體的成員函數,而不是一個自由函數,那麼,這個函數指針的聲明和定義如下所示 : int (X::*callback)(int) = &X::Foo;
如下寫法是錯誤的:
int (*callback)(int) = &X::Foo;
之後,我們就可以通過該函數指針來調用結構體的成員函數了,例子如下:
//must use '.*' or '->*' to call pointer-to-memeber function
int main(int argc, char *argv[])
{
X x;
int (X::*callback)(int) = &X::Foo;
( x.*callback)(5);
X* object = &x;
(object->*callback)(5);
}