Я пишу приложение на C ++, которое использует множество дочерних объектов, вложенных в один «корневой» объект.
Каждый из них должен быть инициализирован в определенном порядке с выполнением различных операций между каждой инициализацией, а иногда и необходимостью предварительно инициализировать их в качестве аргументов друг другу.
Однако мой компилятор заставляет меня инициализировать их в списке инициализатора конструктора, настаивая на инициализации в пределах конструктора недостаточно.Например, я не мог сделать следующее:
SomeThing::SomeThing() {
int argGottenByLibraryCall;
someLibraryCallToGetArg(&argGottenByLibraryCall);
m_ChildObject = ChildClass(argGottenByLibraryCall);
}
Я взялся за реализацию функции инициализатора после создания:
SomeThing::SomeThing() : m_ChildObject() {
int argGottenByLibraryCall;
someLibraryCallToGetArg(&argGottenByLibraryCall);
m_ChildObject.Initialize(argGottenByLibraryCall);
}
Это, однако, кажется плохой практикойдля меня, чтобы следовать.Есть ли лучший способ заставить мой компилятор (VC ++ 2017) принимать инициализацию в теле конструктора?