Выбор того, какой базовый конструктор вызывается, происходит перед телом функции, и нет способа изменить его во время выполнения подобным образом.Тем не менее, вы можете быть ближе.Если в базовом классе также есть конструктор перемещения или вы можете добавить его, вы можете использовать его:
class Derived : public Base {
public:
Derived()
: Base{ exists("myFile") ? Base{"myFile"} : Base{1, 2} } {
}
}
Это вызовет exists("myFile")
;если он возвращает true
, он создаст временный Base
с использованием первого конструктора, а если он вернет false
, он создаст временный Base
с использованием второго конструктора.В любом случае, он затем создаст фактический базовый подобъект, используя этот временный.