是否可以将某种非专业化的模板类作为模板参数传递给 std::array?类似的东西:
template <class T>
class Field{
};
std::array<Field> a;
或者我必须定义一些 BaseField,并将其子类化为 IntField、StringField、FloatField....?
您可以编写一个将模板作为参数的模板(也称为模板模板参数)。必须专门编写模板以将模板作为参数来允许它,并且std::array
没有指定这样做。
使用别名模板,您可以非常接近 C++11:
template <typename T>
struct Field {};
template <typename T>
using FieldArray5 = std::array<Field<T>,5>;
int main() {
FieldArray5<int> a0;
}
但请记住,std::array
大小也需要一个模板参数。
如果你想让 anstd::array
持有不同的类型,它只能通过多态来完成。你也可以使用boost::any
它来隐藏你的多态性,但仍然实现它。