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

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

Mary-Kate Olsen
リリース: 2024-11-02 02:57:30
オリジナル
1021 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート