如何为模板类AClass声明和设置成员变量,类型为std::array<T, ?>
(未定义大小)?实际的std::array
将在构造函数中创建,其中数组的大小是构造函数参数。
在伪C ++代码中:
template <typename T> class AClass {
protected:
std::array<T, ?>* array;
public:
AClass(int n) {
this->array = new std::array<T, n>;
}
}
如何更正代码?
答案 0 :(得分:14)
请勿使用std::array
,请使用std::vector
。 std::array
的大小必须是编译时常量。如果要在构造函数中传递它,则需要使用std::vector
。
答案 1 :(得分:9)
要在构造函数中创建实际
std::array
,其中数组的大小是构造函数参数。
std::array
的大小必须在编译时知道,在你的情况下不是。
您必须使用std::vector
。
答案 2 :(得分:4)
与在运行时真正定义大小的std::vector
分开,您也可以选择在编译时指定大小(例如根据您的问题指定最大可能值)并'传播'模板参数给你班级的客户,即
template <typename T, std::size_t n>
class AClass {
protected:
std::array<T, n> array;
public:
AClass() {
// nothing to do
}
}
然后你就这样使用它:
AClass<int, 5> myAClass;
答案 3 :(得分:2)
您不能拥有未定义尺寸的std::array
请改用std::unique_ptr<T[]>
或std::vector
。