ホームページ  >  記事  >  バックエンド開発  >  C でテンプレート関数内でのテンプレート メンバー関数の呼び出しが失敗するのはなぜですか?

C でテンプレート関数内でのテンプレート メンバー関数の呼び出しが失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 02:57:30991ブラウズ

Why Does Template Member Function Invocation Within a Template Function Fail in C  ?

テンプレート関数内でのテンプレート メンバー関数の呼び出し

指定されたコードで、テンプレート関数 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 サイトの他の関連記事を参照してください。

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