c ++ Lista inicjalizatorów konstruktorów ze złożonymi przypisaniami

Przypuśćmy, że chcę mieć konstruktor, który odbiera niektóre parametry, a dzięki tym parametrom mogę obliczyć wartości dla jego zmiennych składowych. Z wyjątkiem tego, że wartości zmiennych składowych nie są prostymi przypisaniami z parametrów. Wymagają utworzenia innych obiektów i transformacji wartości, zanim będą mogły być użyte jako wartości dla zmiennych składowych.

Jest to sposób, aby wcisnąć się w listę inicjalizacyjną. Również bardzo nieefektywny, ponieważ nie można tworzyć zmiennych i używać ich ponownie, więc trzeba będzie skopiować kod (i wykonać kilka kopii tego samego obiektu), aby zmieścić cały kod na liście inicjalizatora.

Inną opcją nie jest użycie listy inicjalizującej i wywołanie domyślnego konstruktora, a następnie nadpisanie wartości wewnątrz konstruktora prostymi obliczeniami.

A co jeśli klasa nie ma domyślnego konstruktora? Jak można to zrobić starannie?

/* 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
      {}
};

questionAnswers(2)

yourAnswerToTheQuestion