std :: array with unspecialized template class

时间:2012-04-25 18:28:21

标签: c++ templates c++11

是否可以将某种非特定的模板类作为模板参数传递给std :: array?类似的东西:

template <class T>
class Field{
};

std::array<Field> a;

或者我必须定义一些BaseField,并将其子类化为IntField,StringField,FloatField ....?

3 个答案:

答案 0 :(得分:4)

您可以编写一个模板,将模板作为参数(也就是模板模板参数)。必须专门编写模板以将模板作为参数来允许它,并且未指定std::array来执行此操作。

答案 1 :(得分: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也需要大小的模板参数。

答案 2 :(得分:1)

如果您希望std::array拥有不同的类型,则只能通过多态来完成。您也可以使用boost::any隐藏您的多态性但仍然实现它。