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

如果你想让 anstd::array持有不同的类型,它只能通过多态来完成。你也可以使用boost::any它来隐藏你的多态性,但仍然实现它。

于 2012-04-25T18:31:56.730 回答