テンプレート関数内でのテンプレート メンバー関数の呼び出し
指定されたコードで、テンプレート関数 g 内でテンプレート メンバー関数 f を呼び出そうとしています。コンパイル エラーで失敗します:
<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 (Line 18) }</code>
C 標準 (14.2/4) によれば、メンバー テンプレートの特殊化が . の後に呼び出される場合、テンプレート キーワードを明示的に指定して、非テンプレートと区別する必要があります。テンプレート メンバー関数。
コンパイル エラーを解決するには、コードを次のように変更する必要があります。
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // add `template` keyword here }</code>
テンプレート キーワードを追加すると、コンパイラは呼び出された関数がメンバー テンプレートであることを認識します。特殊化して曖昧さを解決し、コードを正常にコンパイルできるようにします。
以上がC でテンプレート関数内でのテンプレート メンバー関数の呼び出しが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。