ホームページ >バックエンド開発 >C++ >C テンプレートで「typename」キーワードが必要になるのはどのような場合ですか?

C テンプレートで「typename」キーワードが必要になるのはどのような場合ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 12:52:09321ブラウズ

When is the

なぜ「typename」キーワードが必要ですか?

プログラミングでは、ネストされた名前を使用するのが一般的です。ここで、1 つのエンティティの名前 (例: クラス) が別のエンティティ (例: メンバー関数) の名前に含まれています。通常、このネストはどのエンティティが参照されているかを区別するのに十分ですが、コンパイラが明示的な指定を必要とする場合もあります。

「typename」キーワードの説明

「typename」 " キーワードは、ネストされた名前が型を参照することを明示的に宣言するために使用されます。これは、コンパイラがコンテキストからネストされた名前の型を推測できない場合に必要です。このようなネストされた名前は、「依存名」として知られています。

ネストされた名前は、不明なパラメーターを持つテンプレート インスタンス内で使用されると依存します。この状況では、テンプレート パラメーターが判明するまで、コンパイラにはネストされた名前の特定の型を判断するための十分な情報がありません。

次のコードを考えてみましょう。 :

template<class K>
class C {
    struct P {};
    vector<P> vec;
    void f();
};

template<class K> void C<K>::f() {
    typename vector<P>::iterator p = vec.begin();
}

この例では、「iterator」のネストされた名前がテンプレートに依存しているため、「typename」キーワードが必要ですパラメータ「K」 "typename" キーワードがないと、コンパイラは "iterator" が型 "vector

::iterator" を参照していることを認識できません。

"typename" が必要なその他のケース

上記の例以外にも「typename」が必要な場合include:

  • テンプレート クラス内でネストされた型を参照する場合
  • 型にアクセスするために修飾名を使用する場合
  • テンプレート テンプレート パラメーターを宣言する場合
  • テンプレートを特定のタイプに特化する場合

以上がC テンプレートで「typename」キーワードが必要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。