Сообщение list vs aggregate initialization от 01.03.2018 19:45
Изменено 01.03.2018 20:17 rg45
list vs aggregate initialization
Привет всем. Есть желание поговорить об aggregate и list инициализацииях и о том, как их подружить.
Дана структура, которая выглядит примерно так:
ну или так (в контескте данного топика эти определения полностью равнозначны):
Эта структура поддерживает агрегатную инициализацию и может быть проинициализирована, например, вот так:
Этот тип позволяет создавать вложенные структуры данных и по-прежнему поддерживает агрегатную инициализацию, например:
Теперь задача в том, чтобы сделать член data закрытым и предоставить конструкторы для этого класса так, чтобы форма инициализации не изменилась. Ну или изменилась, но как-нибудь разумно. Например, меня бы устроило, если бы инициализация вложенных структур данных выглядела бы так:
Но это уже опционально — если сохранится вид, присущий агрегатной инициализации, меня бы это вполне устроило.
Короче говоря, вот в этом примере: https://ideone.com/SxpvxR нужно сделать член data закрытым.
Дана структура, которая выглядит примерно так:
template <typename T, size_t N>
struct Array
{
T data[N];
};
ну или так (в контескте данного топика эти определения полностью равнозначны):
template <typename T, size_t N>
struct Array
{
std::array<T,N> data;
};
Эта структура поддерживает агрегатную инициализацию и может быть проинициализирована, например, вот так:
Array<int, 10> array { 0, 1, 2, 3, 4, /* 5, 6, 7, 8, 9 */ }; // Обратите внимание на возможность неполной спецификации
Этот тип позволяет создавать вложенные структуры данных и по-прежнему поддерживает агрегатную инициализацию, например:
Array<Array<Array<int, 3>, 3>, 3> table { 0, 1, 2, /*....*/};
Теперь задача в том, чтобы сделать член data закрытым и предоставить конструкторы для этого класса так, чтобы форма инициализации не изменилась. Ну или изменилась, но как-нибудь разумно. Например, меня бы устроило, если бы инициализация вложенных структур данных выглядела бы так:
Array<Array<int, 3>, 3> table { { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 }};
Но это уже опционально — если сохранится вид, присущий агрегатной инициализации, меня бы это вполне устроило.
Короче говоря, вот в этом примере: https://ideone.com/SxpvxR нужно сделать член data закрытым.
Чего НЕ хотелость бы получить | |
| |
list vs aggregate initialization
Привет всем. Есть желание поговорить об aggregate и list инициализацииях и о том, как их подружить.
Дана структура, которая выглядит примерно так:
ну или так (в контескте данного топика эти определения полностью равнозначны):
Эта структура поддерживает агрегатную инициализацию и может быть проинициализирована, например, вот так:
Этот тип позволяет создавать вложенные структуры данных и по-прежнему поддерживает агрегатную инициализацию, например:
Теперь задача в том, чтобы сделать член data закрытым и предоставить конструкторы для этого класса так, чтобы форма инициализации не изменилась. Ну или изменилась, но как-нибудь разумно. Например, меня бы устроило, если бы инициализация вложенных структур данных выглядела бы так:
Но это уже опционально — если сохранится вид, присущий агрегатной инициализации, меня бы это вполне устроило.
Короче говоря, вот в этом примере: https://ideone.com/SxpvxR нужно сделать член data закрытым.
Дана структура, которая выглядит примерно так:
template <typename T, size_t N>
struct Array
{
T data[N];
};
ну или так (в контескте данного топика эти определения полностью равнозначны):
template <typename T, size_t N>
struct Array
{
std::array<T,N> data;
};
Эта структура поддерживает агрегатную инициализацию и может быть проинициализирована, например, вот так:
Array<int, 10> array { 0, 1, 2, 3, 4, /* 5, 6, 7, 8, 9 */ }; // Обратите внимание на возможность неполной спецификации
Этот тип позволяет создавать вложенные структуры данных и по-прежнему поддерживает агрегатную инициализацию, например:
Array<Array<Array<int, 3>, 3>, 3> table { 0, 1, 2, /*....*/};
Теперь задача в том, чтобы сделать член data закрытым и предоставить конструкторы для этого класса так, чтобы форма инициализации не изменилась. Ну или изменилась, но как-нибудь разумно. Например, меня бы устроило, если бы инициализация вложенных структур данных выглядела бы так:
Array<Array<int, 3>, 3> table { { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 }};
Но это уже опционально — если сохранится вид, присущий агрегатной инициализации, меня бы это вполне устроило.
Короче говоря, вот в этом примере: https://ideone.com/SxpvxR нужно сделать член data закрытым.
Чего НЕ хотелость бы получить | |
так это необходимость указывать типы элементов явно:
| |