考虑这样一个类:
class MyReferenceClass
{
public:
MyReferenceClass();
const double ImportantConstant1;
const double ImportantConstant2;
const double ImportantConstant3;
private:
void ComputeImportantConstants(double *out_const1, double *out_const2, double *out_const3);
}
有一个例程 (ComputeImportantConstants) 在运行时计算三个常量。假设计算相当复杂,并且固有地一次产生所有三个值。此外,结果取决于构建配置,因此对结果进行硬编码不是一种选择。
是否有一种明智的方法将这些计算值存储在类的相应 const double 字段中?
如果没有,您能否建议一种更自然的方式来在 C++ 中声明此类?
在 C# 中,我会在此处使用带有静态构造函数的静态类,但这在 C++ 中不是一个选项。我也考虑过让 ImportantConstant1..3 成为非常量字段或函数调用,但两者似乎都不如。
我发现初始化 const 字段的唯一方法是 use initializer lists , 但似乎不可能在这样的列表中传递多输出计算的结果。
最佳答案
为什么你不能这样做:
MyReferenceClass ComputeImportantConstants(){
//stuff to compute
return MyReferenceClass( const1, const2, const3 );
}
MyReferenceClass{
public:
MyReferenceClass(double _1, double _2, double _3)
: m_Const1(_1),
m_Const2(_2),
m_Const3(_3){}
double getImportantConst1() const { return m_Const1; }
double getImportantConst2() const { return m_Const2; }
double getImportantConst3() const { return m_Const3; }
private:
const double m_Const1,
m_Const2,
m_Const3;
};
像那样将计算函数变成工厂函数?
关于c++ - const 字段的复杂初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256192/