2016-11-15 46 views
0

我有2個類,A和B在不同的類中使用和設置靜態函數指針

A有一個名爲foo()的函數;

B有一個靜態函數指針旨在指向foo,我們稱它爲fuu。

在B類FUU的定義是這樣的

static void (A::*fuu)(); 

某處沿運行時類A組FUU。 我寫的代碼類似於此

B::fuu = &A:foo; 

這正確地設置的函數指針,但我無法使用它(我在B類調用它)

我已經試過

*fuu(); 

B::fuu(); 

B::*fuu(); 

是否有語法錯誤阻止我解除引用?

TLDR試圖從A類的一個實例,在B類調用非靜態函數,從靜態函數

回答

3

你需要

(a.*fuu)(); 

其中aA類的對象,或

(aptr->*fuu)(); 

aptr哪裏是A*類型的指針。

如果沒有A類的對象調用它,則不能調用類A的非靜態成員函數。

+0

是否有無法調用非靜態成員函數的原因?我認爲,因爲指針指向地址空間,所以我可以在解引用後調用它。 也可以解決這個問題嗎?也許將一個非靜態函數作爲回調傳遞給一個靜態函數? –

+1

指向非靜態成員函數的指針就像是指向一個函數的指針,該函數將一個對象指針作爲第一個參數傳遞(在函數內可作爲'this'訪問)。爲了像這樣調用函數指針,你需要傳遞所有參數,包括第一個參數 - 回答中顯示的方法基本上是合成糖以填充第一個參數。 – epx