2013-05-20 4 views
1

Учитывая следующее:Как использовать список инициализации с базовым классом?

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 

ответ

3

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

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

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

И вам придется держать этот контейнер в синхронизации с членами B.

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

+0

Да, я пропустил что-то в своем коде. Исправлена. – fbrereto

+0

@fbrereto: Смотрите мое редактирование. –

Смежные вопросы