模板化類別繼承中的公共成員不可見性
考慮以下C 程式碼:
<code class="cpp">class CBase { public: char Arr[32]; int Fn1(); int Fn2(); }; class CDerived : public CBase { public: int FnSum(); };</code>
在在此程式碼中, CDerived 繼承了CBase 的公共成員。但是,如果此程式碼是模板化的,使 Arr 和函數模板化,則 CBase 的公共成員對 CDerived 不可見。
解決方案
為了解決這個問題,有幾種方法解決方案存在:
解決方案存在問題
解決方案#1 和#2 需要在程式碼中加入詳細內容,導致原始碼膨脹和重複。解決方案#4,禁用嚴格一致性,不可移植並且脫離了 C 標準。
改進的解決方案
為了簡化程式碼,可以使用巨集自動化解決方案#3 中加入using 語句:
<code class="cpp">#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>
此巨集將為CDerived 中使用的所有CBase 成員自動產生必要的using 語句。
以上是如何在 C 中存取模板化基底類別的公共成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!