継承されたクラス テンプレートによるメンバーの非可視性とソース コードの肥大化を回避する
この問題は、クラス テンプレート CDerived がベースから継承するときに発生します。標準 C 準拠を有効にしてコードをコンパイルすると、クラス テンプレート、CBase、および CBase のすべてのパブリック メンバーが CDerived から見えなくなります。
問題の解決策:
解決策 #1: 明示的修飾
CBase
解決策 #2: this-> Prefix
CBase メンバーへの参照の前に this-> を付けます。たとえば、Fn1() は this->Fn1() になります。これによりメンバーも表示されますが、やはり冗長なコード変更が必要になります。
解決策 3: ステートメントの使用
CDerived 内に using ステートメントを追加して、CBase メンバーをインポートします。例: CBase
解決策 4: 非標準の許可モード
コンパイラ設定で厳密な C 準拠を無効にして、名前検索の問題を抑制します。ただし、これは標準から切り離されたグローバルなソリューションであり、移植性はありません。
より簡潔なソリューション #5:
ソリューション # の冗長性を軽減するには3、マクロを使用して必要な using ステートメントを生成できます。
実装:
Boost プリプロセッサ ライブラリをインクルードし、単一の using ステートメントを生成するマクロ USING_ONE を定義します。特定の基本メンバーに対するステートメントを定義します。
指定されたすべての基本メンバーに対して一連の using ステートメントを生成するには、別のマクロ USING_ALL を定義します。
基本クラス テンプレートで、マクロ USING_CBASE を定義します。派生クラス テンプレートで使用されるすべての保護されたメンバーとパブリック メンバーの using ステートメントを生成します。
派生クラス テンプレート内で、適切な USING_CBASE マクロを使用し、前に定義したマクロを使用して必要なメンバーをインポートします。このプロセスでは最小限の検索と入力が必要であり、移植性を維持しながらソース コードの肥大化を軽減します。
以上が継承されたクラス テンプレートでのメンバーの非表示とソース コードの肥大化を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。