Список инициализатора конструктора 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
      {}
};

Ответы на вопрос(2)

Ваш ответ на вопрос