継承されたクラス テンプレートによるパブリック メンバーの非表示とソース コードの繰り返しの回避
オブジェクト指向プログラミングでは、継承によりクラスがプロパティとメソッドを継承できるようになります。親クラスから。ただし、クラス テンプレートが導入されると、C 標準に厳密に準拠しているため、パブリック メンバーが派生クラスにアクセスできなくなる可能性があります。この問題は、派生クラスでパブリック メンバーを参照しようとすると問題を引き起こす可能性があります。
この問題に対しては、次の 4 つの既存の解決策が提案されています。
これらのソリューションはアクセシビリティの問題に対処する可能性がありますが、冗長なコード、抑制された仮想呼び出し、非移植性などの潜在的な欠点があります。
提案された拡張ソリューション
既存のソリューションを改善するには、マクロを利用してソリューション #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 中国語 Web サイトの他の関連記事を参照してください。