Правильный метод для объявления структуры как member в другой структуре

Недавно я задал вопрос о проблемах с объявлением структур в другой структуре,но мой вопрос был помечен как дубликат.

Ссылка: https://stackoverflow.com/questions/69233545/how-to-allocate-memory-for-struct-as-member-in-other-struct

Я ознакомился с предложенным ответом, но мой вопрос пока ещё остался открытым.

struct A
{
public:
    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
    int g;
    int h;
    int i;
    int j;
    int k;

    A(int c_a, int c_b, int c_c, int c_d, int c_e, int c_f, int c_g, int c_h, int c_i, int c_j, int c_k)
    {
        a = c_a;
        b = c_b;
        c = c_c;
        d = c_d + 3;
        e = c_e;
        f = c_f;
        g = c_g - 9;
        h = c_h;
        i = c_i * 4;
        j = c_j;
        k = c_k;
    }
};

struct B
{
public:
    A a;

    B(A c_a) : a{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
    {
        a = c_a;
    }
};

В коде моего проекта имеются такие 3 структуры. И если таким образом инициализировать поля структуры, то код кажется слишком большим т.к. в каждой субструктуре имеется по 15 полей. На инициализацию нужных полей (где тип - пользовательская структура) уходит 3 линии кода или одна очень длинная строка.

Поэтому я хотел спросить подобный путь - это действительно верный способ. Я просто не видел ни одного примера где идёт инициализация конструктора (:) от 300 символов и выше.

Заранее приношу извинения за нубские вопросы. Я в c++ новичок и ранее пользовался другими языками программирования где если ты объявляешь переменную это не значит что ты вызываешь конструктор типа этой переменной.


Ответы (1 шт):

Автор решения: Wusiki Jeronii

Я задал вопрос на международной версии stackowerflow.

Ссылка: https://stackoverflow.com/questions/69236441/right-method-to-declare-a-struct-as-member-in-another-struct/

Думаю я понял. Самый оптимальный вариант - это специализация через принимаемый аргумент:

B(A c_a) : a{c_a}
{
}

Насколько я понял. Во первых, конструктор по умолчанию это лишняя работа которая судя по всему идёт в RT. А специализация - это CT. Во вторых не очень понятно что программа будет делать с памятью экземпляра структуры через конструктор по умолчанию если эта память по факту не нужна. Я пока не буду закрывать этот вопрос. Мне честно говоря, после d объявлять часть аргументов через тело функции, а часть через специализацию кажется немного диким. Получается каша-мала.

Но пока буду пользоваться предложенным вариантом. Если я что-то неправильно понял, пожалуйста, поправьте меня.

→ Ссылка