ホームページ > バックエンド開発 > C++ > C テンプレートで「typename」キーワードが必要な場合となぜ必要ですか?

C テンプレートで「typename」キーワードが必要な場合となぜ必要ですか?

Susan Sarandon
リリース: 2024-12-19 03:46:11
オリジナル
260 人が閲覧しました

When and Why Do You Need the

「typename」キーワードの構文

「typename」キーワードは、依存する名前であるネストされた名前を参照するときに C で使用されます。これは、不明なパラメーターを持つテンプレート インスタンス内にネストされていることを意味します。このキーワードは、特に推論されたエンティティ (値、型、またはテンプレート) があいまいな場合に、名前が型を表すことを明示的に指定します。

ネストされた名前での "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」キーワードが必要ですp を型、つまり P 構造体のベクトルの反復子として宣言します。 "typename" がないと、コンパイラはシーケンス ベクトル

::iterator を値または関数を表す式として解釈し、これは正しくありません。

"typename" が必要な追加のケース

ネストされた名前とは別に、以下では「typename」キーワードも必要ですシナリオ:

  • テンプレートのテンプレート引数の型を参照する場合
  • テンプレート クラスのメンバー関数を別のテンプレート クラスのフレンドとして宣言する場合
  • テンプレートパラメータパックのタイプ
  • 依存名を特定のタイプにキャストする場合

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

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