テンプレート関数内でのテンプレート メンバー関数の呼び出し
提供されたコード スニペットは、テンプレート関数内からテンプレート メンバー関数を呼び出すときに発生したエラーを示しています。 :
<code class="cpp">template<class X> struct A { template<int I> void f() {} }; template<class T> void g() { A<T> a; a.f<3>(); // Compilation fails here }</code>
コンパイラーはこのコードのコンパイルに失敗し、メンバーの無効な使用に関連するエラーを報告し、「&」が忘れられている可能性があることを示唆しています。
説明
このエラーは、コードが前に「template」キーワードを明示的に指定せずにメンバー テンプレートを呼び出そうとするために発生します。 C 標準 (14.2/4) によれば、メンバー テンプレートの特殊化の名前が後置式のドットまたは矢印の後、または修飾 ID 内のネストされた名前指定子の後に使用される場合、および後置式または、qualified-id が template-parameter に明示的に依存する場合は、メンバー テンプレート名の前にキーワード「template」を付ける必要があります。それ以外の場合、名前は非テンプレートを参照すると想定されます。
解決策
この問題を解決するには、「テンプレート」を明示的に指定するようにコードを変更する必要があります。 ' メンバー テンプレート名の前のキーワード:
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // add 'template' keyword here }</code>
この変更により、コンパイラはメンバー テンプレート関数を正しく識別して呼び出すことができ、コードは正常にコンパイルされます。
以上がテンプレート関数内でテンプレート メンバー関数を呼び出すときにコンパイラがコンパイルに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。