「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > テンプレート化された関数からメンバー関数テンプレートを呼び出すときに `template` キーワードが必要なのはなぜですか?

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

2024 年 11 月 6 日に公開
ブラウズ:791

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

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

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

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

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

template void g()
{
   A a;
   a.template f();  // Explicitly specify 'template' keyword
}

template キーワードを追加すると、コンパイラは f が A クラス テンプレートのメンバー テンプレートであることを正しく識別し、A::f() を正常に呼び出すことができます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3