Список инициализатора конструктора c ++ со сложными назначениями
Предположим, я хочу иметь конструктор, который получает некоторые параметры, и с этими параметрами я могу вычислить значения для него 'переменные-члены. За исключением того, что значения переменных-членов не являются простыми присваиваниями из параметров. Они требуют создания других объектов и преобразования значений, прежде чем их можно будет использовать в качестве значений для переменных-членов.
Это способ втиснуть в список инициализатора. Также очень неэффективно, так как вы можете• Создайте переменные и используйте их повторно, так что вам придется копировать код (и делать несколько копий одного и того же объекта), чтобы поместить весь код в список инициализатора.
Другой вариант - не использовать список инициализатора и вызывать конструктор по умолчанию, тогда вы перезаписываете значения внутри конструктора аккуратными вычислениями.
А что если класс не имеет конструктора по умолчанию? Как можно сделать это аккуратно?
/* a class without a default constructor */
class A {
public:
B x1
B x2
A(B x1_, B x2_) : x1{x1_}, x2{x2_} {};
};
/* a class that contains an A object and needs to initialize it based on some complex logic */
class C {
public:
A a;
C(D d) :
a{b1,b2} // ultimately I just want to initialize a with two B objects
// but unfortunatelly they require a lot of work to initialize
// including instantiating other objects and using tons of methods
{}
};