C++ C++;17:在初始值设定项列表中调用基类和委托构造函数
我有一个类C++ C++;17:在初始值设定项列表中调用基类和委托构造函数,c++,inheritance,constructor,c++17,C++,Inheritance,Constructor,C++17,我有一个类B,它由一组数据成员组成,我希望在构造时初始化这些数据成员 但是,它们初始化所需的参数是 要计算的代价很高的函数 依赖于基类数据成员 我正在寻找一种只计算一次参数并初始化初始化器列表中所有数据成员的方法 在下面的示意图示例中,类B的所有数据成员都需要执行Temp()调用。后一个调用取决于基类变量。因此,我希望把基类和委托构造函数都调用,但这不是按照C++规则的可能。 结构A{ int值; A(intv):值{v+1}{}; }; 结构B:公共A{ 双值1; 双值2; 双值3; do
B
,它由一组数据成员组成,我希望在构造时初始化这些数据成员
但是,它们初始化所需的参数是
- 要计算的代价很高的函数
- 依赖于基类数据成员
B
的所有数据成员都需要执行Temp()
调用。后一个调用取决于基类变量。因此,我希望把基类和委托构造函数都调用,但这不是按照C++规则的可能。
结构A{
int值;
A(intv):值{v+1}{};
};
结构B:公共A{
双值1;
双值2;
双值3;
double Temp()常量{return 0.5+A::value_;}
B(int v):a(v),b(TeaveMe){};//Currist:这是按照C++标准非法的
私人:
B(双温)
:value1{temp}
,value2{temp}
,value3{temp}{};
};
如果您的示例代表您的实际代码,那么您可以将其分配给构造函数主体中的值不幸的是,在实际代码中,这些数据成员不是双重的,因此我也希望避免默认初始化。
B(int v):A(v),value1(Temp()),value2_(value1_),value3_(value1_){
请注意,在初始值设定项列表中列出的成员的顺序与它们在类定义中出现的顺序相同。或者,将valueX\u
三个成员包装在一个helper类中,B
派生自(可能是私有的)或作为成员保留。给该助手类一个合适的构造函数,从B
的初始值设定项列表向其传递Temp()
。