使用繼承的類別模板避免成員不可見和原始碼膨脹
當類別模板CDerived 從基類繼承時會遇到問題當程式碼在啟用標準C 一致性的情況下編譯時,類別模板、CBase 和CBase 的所有公共成員對CDerived 不可見。
問題的解決方案:
解#1:明確限定
使用CBase
使用CBase
解決方案#2:this->前綴
使用this-> 對CBase 成員的引用加上前綴,例如,Fn1() 變成this->Fn1 ()。這也使成員可見,但再次需要詳細的程式碼變更。
解決方案#3:使用語句
在CDerived 中加入using 語句以匯入CBase 成員,例如,使用CBase
解決方案#4:非標準授權模式
在編譯器設定中停用嚴格的 C 一致性以抑制名稱查找問題。然而,這是一個脫離標準的全局解決方案,而且不可移植。
更簡潔的解決方案#5:
減少解#的冗長3、可以使用巨集來產生必要的using語句。
實作:
包含Boost預處理器庫並定義一個巨集USING_ONE,用於產生單一using 定義另一個巨集USING_ALL,為所有指定的基底成員產生一系列using 語句。 在基底類別範本中,定義一個巨集 USING_CBASE,為將在衍生類別範本中使用的所有受保護和公用成員產生 using 語句。 在衍生類別範本中,使用適當的 USING_CBASE 巨集透過前面定義的巨集匯入必要的成員。此過程需要最少的搜尋和輸入,減少原始程式碼膨脹,同時仍保持可移植性。以上是如何避免繼承類別模板中的成員不可見和原始碼膨脹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!