是否可以将某种非特定的模板类作为模板参数传递给std :: array?类似的东西:
template <class T>
class Field{
};
std::array<Field> a;
或者我必须定义一些BaseField,并将其子类化为IntField,StringField,FloatField ....?
答案 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
隐藏您的多态性但仍然实现它。