派生クラス テンプレート内の Typedef が認識されません
基本クラス テンプレート A から継承する派生クラス テンプレート B を宣言する場合、typedef が期待されますA で定義された Vec_t は B 内でアクセス可能になります。ただし、この例では、B 内の Vec_t へのアクセスは失敗します。認識されないというエラーです。
C 標準 (14.6.2/3) によれば、クラス テンプレート定義およびメンバー定義では、非修飾名の検索はテンプレート パラメーターに依存する基本クラスには拡張されません。 。これは、派生クラス テンプレート内では、基本クラスで定義された typedef への無修飾アクセスが許可されていないことを意味します。
この問題を解決するには、typedef の完全名を派生クラス テンプレート内で使用する必要があります。これは、次のように基底クラスのスコープを明示的に指定することで実現できます。
typename A<T>::Vec_t v;
基底クラスのスコープで名前を明示的に修飾することで、コンパイラーは基底クラスで定義された Vec_t typedef への参照を正しく解決できます。テンプレート。
以上が基本クラス テンプレートの typedef が派生クラス テンプレートでアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。