2010-07-22 76 views
1

作爲一個類的私有成員,我可以有一個函數指針數組嗎?類似的,函數指針作爲類成員的數組

class MyClass { 
public: //public stuff 

private: 
void (*specficFunctions[16]) (void); 
} 

我特別不想使用函數或函數。

+1

你真的試過了嗎?如果是的話,你的錯誤是什麼? [因爲作爲一個類的私有成員擁有一個函數指針數組是完全合法的] – 2010-07-22 18:14:24

+1

我想你知道_member_函數指針與指向_non-member_函數的指針不同嗎? (並且,如果你需要一個成員函數指針數組,重新考慮你的設計,虛擬函數是這樣實現的,不需要重新實現它們。) – sbi 2010-07-22 18:23:12

+0

我還沒有。我仍然在粗暴。對我來說,這是一種事情,如果我搞砸了,那很難解決。 – David 2010-07-22 18:23:54

回答

2

是的,儘管你通常要使用typedef,以保持語法有點更易於管理:

class MyClass { 
    typedef void (*fptr)(void); 

    fptr SpecificFunctions[16]; 
}; 

但是請注意,這些是指向全球功能,成員函數。

+0

Typedefs很好,我會用它們。我正在努力的事情由於幾個原因而受到脆弱的影響。我試圖將這種脆弱性分離成一個單元,同時保持它的功能。然後,我要解決這些問題。 – David 2010-07-22 18:18:51

2

函數指針沒有什麼特別之處。聲明語法可能會令人困惑(可以通過typedefs來緩解),但它們與其他指針並沒有太大區別。如果你可以創建一個指針數組,你可以創建一個函數指針數組。與任何其他類型的變量相比,類的私有成員也沒有什麼特殊之處。如果你可以創建一個數組,你可以將一個數組作爲一個類的私有成員。

+0

我意識到'私人'部分不是它的重要組成部分。我記得,成員函數編譯時隱式引用了'this'對象。我不知道這會如何影響函數指針 - 作爲成員[而不是更常見的指向成員函數的指針]。 – David 2010-07-22 18:21:58

+1

@David:'this'僅對成員_functions_隱含,而不對_data_成員隱含。 – sbi 2010-07-22 18:36:25

2

是的。 (你總是可以通過編譯這樣的代碼來回答這種問題。)

+5

編譯並不是測試一般情況下是否允許進行的測試。你可能會遇到一個奇怪的編譯器擴展,或者它與標準的最後幾個不兼容之一。 – 2010-07-22 18:14:05

+0

@大衛,好點。 – 2010-07-22 18:26:26