ホームページ  >  記事  >  バックエンド開発  >  テンプレート化された関数からメンバー関数テンプレートを呼び出すときに `template` キーワードが必要なのはなぜですか?

テンプレート化された関数からメンバー関数テンプレートを呼び出すときに `template` キーワードが必要なのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 15:58:02429ブラウズ

Why Does Invoking a Member Function Template from a Templated Function Require the `template` Keyword?

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

提供されたコード スニペットでは、別のテンプレート内からメンバー関数テンプレートを呼び出すと、次のようになります。コンパイルエラー。具体的には、コードは g() 内から A::f<3>() を呼び出そうとします。ただし、これは構文の問題により失敗します。

これを解決するには、メンバー関数の呼び出し前にテンプレート キーワードを明示的に指定する必要があります。これは、C '03 標準 14.2/4 によれば、メンバー テンプレート特殊化の名前がテンプレート パラメーターに依存する後置式または修飾 ID の後に表示される場合、メンバー テンプレート名の前にテンプレート キーワードを付ける必要があるためです。 .

したがって、次のコードは正しいです:

<code class="cpp">template<class T> void g()
{
   A<T> a;
   a.template f<3>();  // Explicitly specify 'template' keyword
}</code>

template キーワードを追加すると、コンパイラは f が A クラス テンプレートのメンバー テンプレートであることを正しく識別でき、 A::f<3>().

の呼び出しに成功しました。

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

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