テンプレートのベースから派生クラスへの型エイリアスの伝播
C では、コードの可読性と保守性を向上させるために型エイリアスを定義するのが一般的です。ただし、クラス テンプレートと継承を使用する場合、基本クラスから派生クラスに typedef を伝播するには、特定のアプローチが必要です。
typedef のみを含む基本クラス テンプレート A があるとします。
template<typename T> class A { public: typedef std::vector<T> Vec_t; };
次に、A を継承する派生クラス テンプレート B を作成しましょう。
template<typename T> class B : public A<T> { private: Vec_t v; // fails - Vec_t is not recognized };
このコードでは、派生クラス B で Vec_t を使用しようとすると、エラーが発生します。これは、Vec_t の修飾名検索が派生クラス テンプレートの定義中またはテンプレートのインスタンス化中に実行されないためです。
この問題を解決するには、typedef の完全修飾名を派生クラス:
typename A<T>::Vec_t v;
この表記法は typedef のスコープを完全に指定し、それを派生クラスに伝播できるようにします。 class.
本質的に、C 標準では、テンプレート パラメーターに依存する基本クラスのスコープが非修飾名の検索中に検査されないことが要求されます。この制限により、typedef の解決が、クラス テンプレートのさまざまなインスタンス化にわたって一貫性があり、予測可能であることが保証されます。
以上がC で基本クラス テンプレートから派生クラス テンプレートに型エイリアスを適切に継承するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。