目前,我有一个具有两个不同构造函数的基类:
class Base {
public:
Base(std::string filname){...}
Base(int a, int b) {...}
};
和基类的派生类。我想做的是选择在派生类的构造函数中调用哪个构造函数,而不是在初始化列表中。像这样:
class Derived : public Base {
public:
Derived() {
if( /* exists("myFile") */ )
this->Base("myFile");
else
this->Base(1,2);
}
}
是否可以这样做?或者因为基类在派生类之前初始化,所以调用基类构造函数的唯一方法是在初始化列表中?
谢谢
最佳答案
调用哪个基本构造函数的选择发生在函数体之前,并且没有办法像那样在运行时更改它。但是,您也许可以靠近。如果基类也有一个移动构造函数,或者你可以添加一个,你可以使用它:
class Derived : public Base {
public:
Derived()
: Base{ exists("myFile") ? Base{"myFile"} : Base{1, 2} } {
}
}
这将调用exists("myFile")
;如果返回 true
,它将使用第一个构造函数构造一个临时的 Base
,如果返回 false
,它将构造一个临时的 Base
使用第二个构造函数。无论哪种方式,它都会使用这个临时对象构造实际 基础子对象。
关于c++ - 有条件地调用基本构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820198/