ホームページ >バックエンド開発 >C++ >テンプレート クラスのメンバー関数がテンプレート関数から呼び出される場合、なぜ `template` キーワードが必要なのでしょうか?

テンプレート クラスのメンバー関数がテンプレート関数から呼び出される場合、なぜ `template` キーワードが必要なのでしょうか?

DDD
DDDオリジナル
2024-11-02 07:31:29649ブラウズ

Why Do Member Functions of Template Classes Require the `template` Keyword When Called from Template Functions?

テンプレート クラスのメンバー関数: テンプレート関数からの呼び出し

C では、 のメンバー関数を呼び出そうとすると、特有のコンパイル エラーが発生します。テンプレート キーワードを明示的に指定せずに、テンプレート関数内からテンプレート クラスを取得します。次のコードについて考えてみましょう。

template<class X> struct A {
    template<int I> void f() {}
};

template<class T> void g() {
    A<T> a;
    a.f<3>();  // Error!
}

コンパイラは 18 行目でエラーを検出し、メンバー関数の名前が認識されないことを示しています。これは、C 標準 (14.2/4) に記載されているように、特定のシナリオで呼び出すときに、メンバー テンプレートの特殊化の名前にテンプレート キーワードをプレフィックスとして付ける必要があるためです。

問題を修正するには、単にテンプレート キーワードを明示的に含めるコード:

template<class T> void g() {
    A<T> a;
    a.template f<3>();  // Add `template` keyword here
}

更新されたコードは、標準の要件に準拠しており、メンバー テンプレートの名前がテンプレート キーワードで修飾される必要があることを指定しているため、正常にコンパイルされます。テンプレート関数。

以上がテンプレート クラスのメンバー関数がテンプレート関数から呼び出される場合、なぜ `template` キーワードが必要なのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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