テンプレート化されたクラスの継承におけるパブリック メンバーの非表示
次の 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 中国語 Web サイトの他の関連記事を参照してください。