簡體   English   中英

是否可以在C ++中創建指向非靜態成員函數的指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM