避免繼承類別範本中公共成員不可見和程式碼膨脹
物件導向程式依賴於受保護和公用類別成員的繼承。在非模板化環境中,這種繼承很簡單。然而,在引入類別模板時,出現了一個基本問題:基底類別的公共成員對於衍生類別模板變得不可見。
問題
考慮以下範例:
當範本化此程式碼時,CBase 的Fn1() 成員從CDerived 的角度消失:
解決方案
有多種解決方案可以解決此問題:
解決方案1(詳細前綴) :
但是,這種方法在引用多個成員時會導致過多的程式碼膨脹。
解決方案 2(詳細的「this->」前綴):
與解決方案 1 類似,但稍微簡潔一些。
解決方案 3(使用語句):
這允許直接存取 CBase 成員,無需額外前綴。
解決方案 4(寬容模式):
禁用嚴格的 C 合規性,解決了問題,但可能會引入可移植性問題。
更好的解決方案
雖然解決方案 3 是比其他的解決方案
雖然解決方案 3 是比其他的更乾淨,它仍然需要重複的「使用」語句。宏可以簡化這一點:
在衍生類別中:
這種方法顯著減少了程式碼膨脹和重複。以上是為什麼繼承類別模板時基類的公共成員變得不可見?的詳細內容。更多資訊請關注PHP中文網其他相關文章!