1

std::array へのテンプレート パラメータとして何らかの形で特殊化されていないテンプレート クラスを渡すことは可能ですか? それに似たもの:

template <class T>
class Field{
};

std::array<Field> a;

または、いくつかの BaseField を定義し、それを IntField、StringField、FloatField としてサブクラス化する必要があります。

4

3 に答える 3

4

テンプレートをパラメーターとして受け取るテンプレートを作成できます (別名、テンプレート テンプレート パラメーター)。ただし、テンプレートをパラメーターとして使用できるようにするには、テンプレートを特別に作成する必要があり、そのようにstd::array指定されていません。

于 2012-04-25T18:31:56.857 に答える
2

エイリアステンプレートを使用すると、C++11にかなり近づくことができます。

template <typename T>
struct Field {}; 

template <typename T>
using FieldArray5 = std::array<Field<T>,5>;

int main() {

  FieldArray5<int> a0;

}

ただしstd::array、サイズについてもテンプレート引数が必要であることを覚えておいてください。

于 2012-04-25T18:39:19.587 に答える
1

に異なる型を保持させたい場合は、std::arrayポリモーフィズムを介してのみ行うことができます。boost::anyそのポリモーフィズムを隠して実装することもできます。

于 2012-04-25T18:31:56.730 に答える