Как мне использовать список инициализации с базовым классом?

Учитывая следующее:

struct A
{
int foo;
int bar;
};

struct B : public A
{
int baz;
};

Как бы я построить B со списком инициализации, который также создает элементы в A? Кажется, что следующее не работает, но я ищу что-то вроде:

B my_b{{1, 2}, 3}; // foo = 1, bar = 2, baz = 3

1

Решение

Вы не можете сделать это без добавления явного конструктора и выполнения большей части работы самостоятельно:

struct B : public A
{
B(const A &a, int _baz) : A{a}, baz{_baz} {}
int baz;
};

B my_b{{1, 2}, 3};

И вам нужно будет синхронизировать этот контейнер с Bучастники.

Если вы использовали сдерживание вместо наследования, то B все равно будет агрегатом, и поэтому вы можете использовать агрегатную инициализацию.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]