ホームページ > バックエンド開発 > C++ > テンプレート関数メンバーの部分特殊化により「不完全な型の無効な使用」が発生するのはなぜですか?

テンプレート関数メンバーの部分特殊化により「不完全な型の無効な使用」が発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-03 02:17:09
オリジナル
1045 人が閲覧しました

Why Does Partial Specialization of a Template Function Member Cause

部分テンプレート特殊化での「不完全な型の無効な使用」エラー

次の構文でテンプレート関数の部分特殊化を作成しようとしたとき:

1

2

3

template <typename T>

void foo<int, T>::bar() {

}

ログイン後にコピー

「無効な使用法です」というエラーが表示される場合があります。不完全な型 'struct foo'。」これは、C ではメンバー関数を特殊化するときにテンプレート全体を部分的に特殊化する必要があるために発生します。

これを解決するには、クラスを部分的に特殊化するときに完全なテンプレート署名を指定します。

1

2

3

4

5

6

7

8

9

10

template <typename S, typename T>

struct foo {

   void bar();

};

 

template <>

struct foo<int, T> {

   void bar() {

   }

};

ログイン後にコピー

または、次のようにします。ネストされたテンプレート構造体を作成するか、部分的に異なるテンプレートから派生するなどの回避策を使用できます。

注: これは、メンバー関数の部分的な特殊化にのみ適用されます。テンプレート関数を完全に特殊化するには、テンプレート全体を特殊化する必要はありません。

以上がテンプレート関数メンバーの部分特殊化により「不完全な型の無効な使用」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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