typename引数のないテンプレートを特殊化するにはどうすればよいですか?

アントニオ

このテンプレート構造体があり、データ型ごとに異なる関数をコーディングする必要があります。

template <typename T, int _len>
struct Field {
        T data;
        int len;

        Field(){
            len = _len;
        }
};

どうすればいくつかのタイプに特化できますか?このようなもの:

template <>
void Field<int,int> {
...
    void function() {
    ...
        specialization for int
    ...
    } 
...
};

template <>
void Field<char,int> {
...

    void function() {
    ...
        specialization for char
    ...
    } 
...
};

template <>
void Field<String,int> {
...
    void function() {
    ...
        specialization for String
    ...
    } 
...
};

私はあらゆるタイプの提案を受け入れます。他のタイプのデータ構造の使用を検討することもできます。テンプレートを使用して、次のように「フィールド」を定義するのが好きです。

Field <String, 10> myField

ありがとう!

cbuchart

専門化は継承とは異なります。あなたが専門化するとき、あなたはすべてを再宣言しなければなりません、それは異なるタイプとみなされます。

共通の属性とメソッドを含む基本テンプレート構造体を使用して、それを継承するテンプレートを作成できます。

#include <iostream>

template<typename T, int _len>
struct FieldBase {
  T data;
  int len;

  FieldBase() {
    len = _len;
  }
};

template<typename T, int _len>
struct Field : public FieldBase<T, _len> {};

template<int _len>
struct Field<int, _len> : public FieldBase<int, _len> {
  void function() {
    std::cout << "int " << this->len << std::endl;
  }
};

template<int _len>
struct Field<char, _len> : public FieldBase<char, _len> {
  void function() {
    std::cout << "char " << this->len << std::endl;
  }
};

int main()
{
  Field<int, 5> f_int;
  Field<char, 10> f_char;

  f_int.function();
  f_char.function();

  return 0;
}

出力:

int 5

文字10

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

関数テンプレートの特殊化を減らすにはどうすればよいですか?

分類Dev

関数テンプレートの部分的な特殊化を回避するにはどうすればよいですか?

分類Dev

std :: string用にテンプレートを特殊化するにはどうすればよいですか

分類Dev

同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

分類Dev

関数テンプレートを「部分的に特殊化」できるように調整するにはどうすればよいですか?

分類Dev

部分的なクラステンプレートの特殊化で継承を実装するにはどうすればよいですか?

分類Dev

クラステンプレートによって演算子関数タイプを特殊化するにはどうすればよいですか?

分類Dev

既存のテンプレートクラスを新しいタイプに部分的に特殊化するにはどうすればよいですか?

分類Dev

可変個引数テンプレートを使用してテンプレートの特殊化を処理するにはどうすればよいですか?

分類Dev

STLコンテナであるテンプレートパラメータに基づいて、選択したメンバー関数の部分的な特殊化をシミュレートするにはどうすればよいですか?

分類Dev

テンプレート化されていないクラスのテンプレート化されたメンバーメソッドを部分的に特殊化するにはどうすればよいですか?

分類Dev

クラステンプレートの非型パラメータを部分的に特殊化するにはどうすればよいですか?

分類Dev

列挙値のクラステンプレートを部分的に特殊化するにはどうすればよいですか?

分類Dev

可変個引数を使用してこのテンプレートの特殊化をクラスの友達にするにはどうすればよいですか?

分類Dev

定義とは別にvoidに部分的に特殊化されたテンプレートを実装するにはどうすればよいですか?

分類Dev

クラステンプレートの特殊化を使用してエイリアステンプレートの特殊化を作成するにはどうすればよいですか?

分類Dev

関数テンプレートを部分的に特殊化する代わりに、どうすればよいですか?

分類Dev

関数型インターフェースのストレート宣言で型を特殊化するにはどうすればよいですか?

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

クラスを特殊化する場合、異なる数のテンプレートパラメータを取得するにはどうすればよいですか?

分類Dev

インスタンス化されている場合、テンプレート化された変数の特殊化をコンパイル時に失敗させるにはどうすればよいですか?

分類Dev

* .cppファイルにテンプレート特殊化メソッドを実装するにはどうすればよいですか?

分類Dev

それ自体がテンプレートであり、戻り型のみがテンプレート型に依存する型でテンプレートメソッドを特殊化するにはどうすればよいですか?

分類Dev

.cppファイルでテンプレートメンバー関数の明示的な特殊化を定義するにはどうすればよいですか?

分類Dev

関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

分類Dev

プライマリテンプレートをあいまいにすることなく、is_base_ofを使用してテンプレートを特殊化するにはどうすればよいですか?

分類Dev

C ++ 11では、戻り値の型に基づいて関数オブジェクトを受け取る関数テンプレートを特殊化するにはどうすればよいですか?

分類Dev

type_traitsまたはテンプレート関数の特殊化を使用してテンプレートメソッドを統合するにはどうすればよいですか

Related 関連記事

  1. 1

    関数テンプレートの特殊化を減らすにはどうすればよいですか?

  2. 2

    関数テンプレートの部分的な特殊化を回避するにはどうすればよいですか?

  3. 3

    std :: string用にテンプレートを特殊化するにはどうすればよいですか

  4. 4

    同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

  5. 5

    関数テンプレートを「部分的に特殊化」できるように調整するにはどうすればよいですか?

  6. 6

    部分的なクラステンプレートの特殊化で継承を実装するにはどうすればよいですか?

  7. 7

    クラステンプレートによって演算子関数タイプを特殊化するにはどうすればよいですか?

  8. 8

    既存のテンプレートクラスを新しいタイプに部分的に特殊化するにはどうすればよいですか?

  9. 9

    可変個引数テンプレートを使用してテンプレートの特殊化を処理するにはどうすればよいですか?

  10. 10

    STLコンテナであるテンプレートパラメータに基づいて、選択したメンバー関数の部分的な特殊化をシミュレートするにはどうすればよいですか?

  11. 11

    テンプレート化されていないクラスのテンプレート化されたメンバーメソッドを部分的に特殊化するにはどうすればよいですか?

  12. 12

    クラステンプレートの非型パラメータを部分的に特殊化するにはどうすればよいですか?

  13. 13

    列挙値のクラステンプレートを部分的に特殊化するにはどうすればよいですか?

  14. 14

    可変個引数を使用してこのテンプレートの特殊化をクラスの友達にするにはどうすればよいですか?

  15. 15

    定義とは別にvoidに部分的に特殊化されたテンプレートを実装するにはどうすればよいですか?

  16. 16

    クラステンプレートの特殊化を使用してエイリアステンプレートの特殊化を作成するにはどうすればよいですか?

  17. 17

    関数テンプレートを部分的に特殊化する代わりに、どうすればよいですか?

  18. 18

    関数型インターフェースのストレート宣言で型を特殊化するにはどうすればよいですか?

  19. 19

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  20. 20

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  21. 21

    クラスを特殊化する場合、異なる数のテンプレートパラメータを取得するにはどうすればよいですか?

  22. 22

    インスタンス化されている場合、テンプレート化された変数の特殊化をコンパイル時に失敗させるにはどうすればよいですか?

  23. 23

    * .cppファイルにテンプレート特殊化メソッドを実装するにはどうすればよいですか?

  24. 24

    それ自体がテンプレートであり、戻り型のみがテンプレート型に依存する型でテンプレートメソッドを特殊化するにはどうすればよいですか?

  25. 25

    .cppファイルでテンプレートメンバー関数の明示的な特殊化を定義するにはどうすればよいですか?

  26. 26

    関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

  27. 27

    プライマリテンプレートをあいまいにすることなく、is_base_ofを使用してテンプレートを特殊化するにはどうすればよいですか?

  28. 28

    C ++ 11では、戻り値の型に基づいて関数オブジェクトを受け取る関数テンプレートを特殊化するにはどうすればよいですか?

  29. 29

    type_traitsまたはテンプレート関数の特殊化を使用してテンプレートメソッドを統合するにはどうすればよいですか

ホットタグ

アーカイブ