1

A bit of background for the unified call proposal統一的呼叫語法和函數指針

是否統一調用語法允許C++程序員可以輕鬆地投一個成員函數指針非成員函數指針,反之亦然?

換句話說,它允許通過發送類的實例作爲第一個參數來調用成員函數經由非成員函數指針

struct X 
{ 
    void member() { } 
}; 

X x; 

void (*fp)(X*) = &X::member; // ? 
fp(&x);      // ? 
+2

如果你只是想調用它,不一定把它存儲爲一個普通的函數指針,是不是[std :: invoke](http://en.cppreference.com/w/cpp/utility/functional/invoke)將用於? – melak47

回答

4

不,不能用,因爲指向成員函數不能用簡單的函數指針表示。指向成員函數的指針必須能夠處理對其應用對象的虛擬調用,因此它必須包含(或觸發生成)代碼以在必要時解引用vptr。也就是說,它不是一個普通的指針,你只需要call即可。