最近我知道了一个新的模板用法,如下面的
template <unsigned int N>
我在这里看到了答案 What does template <unsigned int N> mean? 它显示了几个例子包括:
template<unsigned int S>
struct Vector {
unsigned char bytes[S];
};
但是,我无法弄清楚这种用法的重点。 为什么我们不使用类初始化来完成这项工作。 这里使用模板的重点是什么?
答案 0 :(得分:1)
必须在编译时知道类的大小。因此,您无法在类初始化时提供大小。这包括类中包含的任何固定大小的数组的大小。
为了混淆问题,有一些编译器扩展允许你使用动态分配大小的固定大小数组的语法,但这不是标准的C ++。
即使像std::vector
这样的类具有固定大小,但它们对其内容使用动态内存分配,因此可以在类初始化时提供内容的大小。此类容器包含指向动态分配的内存的指针,而不是固定大小的数组。