テンプレート関数内でテンプレート メンバー関数を呼び出すときにコンパイラがコンパイルに失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-11-02 16:08:29
オリジナル
710 人が閲覧しました

Why does the compiler fail to compile when invoking a template member function within a template function?

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

提供されたコード スニペットは、テンプレート関数内からテンプレート メンバー関数を呼び出すときに発生したエラーを示しています。 :

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!