[英]Is it possible to create a pointer to a non-static member-function in C++?
我想知道是否可以創建和使用指向非靜態成員函數的指針。 當我在沒有成員函數指針為靜態的情況下編譯代碼時,會出現編譯錯誤。
謝謝...
簡而言之:是的,有可能,沒有,它沒有按照您的想法做。
關鍵事實是非靜態成員函數不是函數(就像花旗松不是冷杉)。 它們是成員函數,而有所不同。 它們只能在給定的對象實例上調用。
因此,為了調用給定實例X a;
的成員函數X::foo()
X a;
,即執行調用a.foo()
,既需要使用X::foo()
,又需要在實例a
上調用它a
。 前者由指針到成員函數提供 ,后者不是指針 ,后者由實例指針或引用提供:
struct X { int foo(bool, char); }; // class definition
X a; // an instance
X * p = &a; // just for demonstration
int (X::*)(bool, char) ptmf = &X::foo; // pointer-to-member-function
現在調用:
(a.*ptmf)(false, 'a');
(p->*ptmp)(true, 'z');
簡而言之: foo
本身不能讓您調用任何東西。 可調用實體是對 (&X::foo, a)
,可讓您調用a.foo()
。
是的,可以在C ++中創建指向成員函數的指針。 查看此常見問題解答: 指向成員的指針
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.