【发布时间】:2018-06-12 14:56:05
【问题描述】:
目前,我有一个带有两个不同构造函数的基础类:
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);
}
}
有可能这样做吗?还是因为基类在派生类之前初始化,所以调用基构造函数的唯一方法是在初始化列表中?
谢谢
【问题讨论】:
-
将调用哪个基本构造函数在编译时确定。没有办法解决这个问题。也许你可以得到你想要的,但在本地构建一个
Base并移动构建实际的基础。否则,您可能希望将该逻辑放入您的Base构造函数中。 -
可以修改
Base类的代码吗? -
顺便说一句,
if file_exists open_file是一个 TOCTOU 错误。
标签: c++ inheritance constructor