首頁  >  文章  >  後端開發  >  如何避免繼承類別模板中的成員不可見和原始碼膨脹?

如何避免繼承類別模板中的成員不可見和原始碼膨脹?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 05:38:27116瀏覽

How Can I Avoid Member Invisibility and Source Code Bloat in Inherited Class Templates?

使用繼承的類別模板避免成員不可見和原始碼膨脹

當類別模板CDerived 從基類繼承時會遇到問題當程式碼在啟用標準C 一致性的情況下編譯時,類別模板、CBase 和CBase 的所有公共成員對CDerived 不可見。

問題的解決方案:

解#1:明確限定

使用CBase::

使用CBase::對CDerived 中的CBase 成員進行前綴引用,例如,Fn1() 變成CBase::Fn1()。這會強制在基類範圍內進行名稱查找,使成員可見。然而,這個解決方案需要在程式碼中添加許多冗長的內容,導致原始程式碼膨脹。

解決方案#2:this->前綴

使用this-> 對CBase 成員的引用加上前綴,例如,Fn1() 變成this->Fn1 ()。這也使成員可見,但再次需要詳細的程式碼變更。

解決方案#3:使用語句

在CDerived 中加入using 語句以匯入CBase 成員,例如,使用CBase::Fn1;使用CBase::Fn2;。這只需要在 CDerived 中使用每個成員一個 using 語句,但不存在導入所有成員的一攬子語句。

解決方案#4:非標準授權模式

在編譯器設定中停用嚴格的 C 一致性以抑制名稱查找問題。然而,這是一個脫離標準的全局解決方案,而且不可移植。

更簡潔的解決方案#5:

減少解#的冗長3、可以使用巨集來產生必要的using語句。

實作:

包含Boost預處理器庫並定義一個巨集USING_ONE,用於產生單一using

定義另一個巨集USING_ALL,為所有指定的基底成員產生一系列using 語句。

在基底類別範本中,定義一個巨集 USING_CBASE,為將在衍生類別範本中使用的所有受保護和公用成員產生 using 語句。 在衍生類別範本中,使用適當的 USING_CBASE 巨集透過前面定義的巨集匯入必要的成員。此過程需要最少的搜尋和輸入,減少原始程式碼膨脹,同時仍保持可移植性。

以上是如何避免繼承類別模板中的成員不可見和原始碼膨脹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn