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

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

Susan Sarandon
リリース: 2024-12-27 22:51:10
オリジナル
379 人が閲覧しました

When is the `typename` Keyword Necessary in C   Templates?

「typename」キーワードはどのような場合に必要ですか?

C では、「typename」キーワードは、依存しているネストされた名前を明確にするために使用されます。テンプレートパラメータについて。

例で「typename」が必要な理由code?

コード例では、ネストされた構造体 P を持つクラス C を定義します。メンバー関数 f() 内の行:

typename vector<P>::iterator p = vec.begin();
ログイン後にコピー

では、「typename」を使用する必要があります。 " なぜなら:

  • 扶養家族の名前:ベクトル

    は、クラス C のテンプレート パラメーター K に依存するネストされた名前です。

  • Ambiguity: "typename" がないと、コンパイラーは、vector

    ::iterator が型であるか、または型であるかを判断できません。テンプレート。

「typename」が必要:

「typename」は次の状況でも必要です:

  • 依存メンバー関数の参照:
template<typename T>
class A {
public:
    void f(typename T::P& p); // Requires "typename"
};
ログイン後にコピー
  • ネストされた依存関係の参照template:
template<typename T>
class A {
public:
    template<typename U>
    void g(typename T::template F<U>& f); // Requires "typename"
};
ログイン後にコピー
  • 依存テンプレートの特殊化の参照:
template<typename T>
class A {
public:
    template<>
    void g<int>(typename T::F<int>& f); // Requires "typename"
};
ログイン後にコピー

一般に、依存するネストされた名前を参照する必要がある場合は常に、 「typename」キーワードは、テンプレートからタイプを明確にするために必要です。

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

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