【发布时间】:2020-05-31 17:50:05
【问题描述】:
我有一个看起来像这样的课程
class StatisticsQuantiles : public StatisticsMC
{
public:
StatisticsQuantiles(double p_, unsigned long NumberOfPaths);
virtual void DumpOneResult(double result);
virtual std::vector<std::vector<double>> GetResultsSoFar() const;
virtual StatisticsMC* clone() const;
private:
std::vector<double> ResultList;
double p;
unsigned long PathsDone;
};
目前它有一个向量 ResultList,当使用如下值调用函数时,我会在我的类中填充值:
void StatisticsQuantiles::DumpOneResult(double result)
{
ResultList.push_back(result);
PathsDone++;
}
现在我知道我会用 NumberOfPaths 个值填充这个向量,所以我想改用一个固定大小的数组。如何获取一个大小为 NumberOfPaths 的数组作为此类的成员?我正在尝试做这样的事情,当然这是行不通的,但你明白了:
class StatisticsQuantiles : public StatisticsMC
{
public:
StatisticsQuantiles(double p_, const unsigned long NumberOfPaths);
virtual void DumpOneResult(double result);
virtual std::vector<std::vector<double>> GetResultsSoFar() const;
virtual StatisticsMC* clone() const;
private:
std::array<double, NumberOfPaths> ResultList;
double p;
unsigned long PathsDone;
};
【问题讨论】:
-
你不能那样做;数组的大小必须在编译时知道。
-
我确实知道大小是多少,我将像这样初始化类:
double p = 0.05;const unsigned long NumberOfPaths = 100000;StatisticsQuantiles absQuantileGatherer(p, NumberOfPaths);但是当我初始化它时如何让我的类知道它? -
如果你在编译的时候就知道大小,你可以把它做成一个模板,以大小为参数。只需确保大小是编译时常量(应用
const和constexpr肝脏)。