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

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

Barbara Streisand
リリース: 2024-12-21 01:03:10
オリジナル
584 人が閲覧しました

When is the

「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();
}
ログイン後にコピー

この例ではなぜ "typename" キーワードが必要ですか?

答え:

「typename」キーワードは、ネストされた名前を参照する場合に必ず必要です。ネストされた名前の型がコンパイル時に不明なテンプレート クラスまたは関数。これは「依存名」と呼ばれます。

C では、エンティティには値、型、テンプレートの 3 つのカテゴリがあります。これらのそれぞれに名前を付けることができますが、名前自体はエンティティがどのカテゴリに属する​​かを示しません。したがって、コンパイラはコンテキストからエンティティ カテゴリを推論する必要があります。

コンパイラがカテゴリを推論できない場合は、適切なキーワードを使用してカテゴリを明示的に指定する必要があります:

  • " typename": 内の型を指定します。 template
  • "template": テンプレート内のテンプレートを指定します
  • "value": テンプレート内の値を指定します (ここでは明示的に示されていません)例)

提供されたコードでは、ネストされた名前「ベクトル

」テンプレート クラス内の型です。ただし、型パラメーター "K" はコンパイル時に不明であるため、コンパイラーはこれを推論できません。したがって、「vector

」を明示的に指定するには、「typename」キーワードが必要です。

「typename」を指定する必要があるその他のケースは次のとおりです。

  • クラス内でテンプレートのエイリアスを宣言する場合
  • コンストラクターまたはデストラクターを定義する場合ネストされた型の場合
  • ネストされた型のメンバー関数にアクセスする場合type
  • 型をテンプレート引数として使用する場合

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート