派生テンプレート クラスがベース テンプレート クラス識別子にアクセスできなくなる理由
C では、派生テンプレート クラスが識別子に直接アクセスできない場合があります。その基本テンプレート クラスの。 2 フェーズ ルックアップとして知られるこの動作は、C 仕様によって強制されます。
次のコード スニペットを考えてみましょう。
template <typename T> class Base { public: static const bool ZEROFILL = true; static const bool NO_ZEROFILL = false; } template <typename T> class Derived : public Base<T> { public: Derived( bool initZero = NO_ZEROFILL ); // NO_ZEROFILL is not visible ~Derived(); }
この例では、派生クラス Derived は、基本クラス Base の NO_ZEROFILL 識別子。これは、テンプレート定義フェーズ中に、コンパイラーが T に代わる実際の型を持たないためです。したがって、コンパイラーは、Base
この動作により、クラスが異なる型でインスタンス化される場合でも、テンプレート クラス内の識別子の意味が明確に定義されます。 Base
提供されたコードの問題を解決するには、次のようにします。以下に示すように、NO_ZEROFILL 識別子を基本クラス名で明示的に修飾できます。
Derived( bool initZero = Base<T>::NO_ZEROFILL );
以上が派生テンプレート クラスがベース テンプレート クラス識別子に直接アクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。