テンプレート クラスのメンバー関数: テンプレート関数からの呼び出し
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 サイトの他の関連記事を参照してください。