std::具有非专用模板类的数组

std::array with unspecialized template class

本文关键字:数组 专用 std      更新时间:2023-10-16

是否可以将某种非专用的模板类作为模板参数传递给 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也需要大小的模板参数。

如果你想让一个std::array拥有不同的类型,它只能通过多态性来完成。您还可以使用对您隐藏多态性但仍能实现它的boost::any