给定以下类:
class A {
public:
const int x;
const int y;
}
我想在类的构造函数中初始化常量变量,但是要在阅读配置文件之后。
A::A(filesystem::path config){
// read and process config into c
x = c.x;
y = c.y;
}
这是行不通的,因为C++希望常量类成员像这样设置:
A::A(filesystem::path config): x{foo}, y{bar} {}
如何实现上面的行为,所以首先读取配置文件,然后设置常量变量?
一个选项是this,所以在一个额外的函数中处理阅读配置文件,但在这种情况下需要调用两次或N次,如果N是要读取的变量的数量,感觉很混乱。
3条答案
按热度按时间m1m5dgzv1#
你可以通过把你的配置放在同一个类中其他变量之前并从它初始化来解决这个问题。构造之后你可以“重置”它以释放内存。下面是一个概念性的例子:
mzaanser2#
考虑使用Builder design pattern:
然后你可以在一行中示例化你的类对象:
cgvd09ve3#
你可以从类成员和基类的初始化顺序规则中获益。也就是说,基类部分按照它们在继承列表中的顺序初始化,然后成员按照它们声明的顺序初始化。
因此,第一种选择是:
这将在config和你的类型之间给予必要的分离。
或使用基类:
这给出了更好的类别分离。