【发布时间】:2017-05-23 06:14:20
【问题描述】:
我希望我的班级成员成为std:array 的向量,但我希望数组大小由班级用户传入的变量确定。这可能吗?我尝试使用初始化列表来执行此操作,但我收到了非常明显的错误消息:
csvParser.cpp:18:35: error: invalid use of non-static data member ‘Parser::featureCount’ std::vector<std::array<lDouble, featureCount> > data;
这是我的尝试:
#include <vector>
#include <array>
typedef long double lDouble;
class Parser {
const size_t featureCount;
std::vector<std::array<lDouble, featureCount> > data;
public:
Parser(size_t numFeatures) : featureCount(numFeatures) {}
};
注意:如果可能的话,我希望类的用户能够传入值来确定数组的大小,但我的尝试并不能说明 有什么 完成,我愿意接受任何建议。
【问题讨论】:
-
会很短,std::array 的大小应该是编译时值
-
另一方面,如果你愿意使用嵌套容器,为什么不选择vector的vector?
-
这意味着
sizeof(Parser)会不连贯,因为它的大小会根据data的类型而有所不同。事实上,它表明Parser不是一个完全指定的类型,因为它的一个数据成员的类型是未知的。 -
听起来你想要的是
std::vector<std::unique_ptr<T[]>> -
@Cliff
unique_ptr没有开销,但它不存储分配的长度(因此您可能需要一个额外的变量来保存长度)