使用繼承的類別模板避免公共成員不可見和原始碼重複
在物件導向程式設計中,繼承允許類別繼承屬性和方法來自他們的父類別。但是,當引入類別範本時,由於嚴格遵守 C 標準,因此衍生類別可能無法存取公共成員。嘗試在衍生類別中引用公共成員時,此問題可能會導致問題。
針對此問題提出了四個現有解決方案:
雖然這些解決方案可以解決可訪問性問題,但它們也有潛在的缺點,例如冗長的程式碼、抑制虛擬呼叫和不可移植性。
建議的增強解決方案
為了改進現有解決方案,可以利用宏來簡化解決方案#3:
<code class="c++">#include <boost/preprocessor.hpp> #define USING_ONE(r, base, member) \ using base::member; #define USING_ALL(base, ...) \ BOOST_PP_SEQ_FOR_EACH(\ USING_ONE, base, \ BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ ) // Near CBase<BYTES> #define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5) // In CDerived<BYTES>, in a `public:` section USING_CBASE(BYTES);</code>
此方法需要加入CBase
此解決方案透過將 using 語句封裝到巨集中,解決了解決方案 #3 的問題,例如重複程式碼。它還透過符合 C 標準來保持可移植性。這個增強的解決方案提供了一種更簡潔、更有效的方法來避免繼承類別模板中公共成員不可見且原始碼重複。
以上是如何避免繼承類別模板中公共成員不可見和原始碼重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!