Open
Description
Предложение
Предположим, у нас есть структура B
, которая содержит поле типа A
:
struct A { int x; int y; };
struct B {
A a;
int z;
}
Сейчас, если я хочу использовать designated initialization для объекта типа B
, мне нужно расписать поле a
отдельно:
B b = B{
.a = A{
.x = 123
},
.z = 3
}
Из-за этого появляется некоторая лишня вложенность.
Предлагается поддержать C-style подход. где в designated initialization можно использовать вложенные поля:
B b = B{
.a.x = 123,
.z = 3
}
Подразумевается, что код выше является синтаксическим сахаром для работающего варианта. Все незадействованные поля заполняются аналогично текущей реализации с zero initialisation.
Где может быть полезно
В небезызвестном фреймворке userver (по крайней мере внутри) при собирании реквеста для похода в эндпоинт другого сервиса часто приходится делать что-то такое:
Request request;
request.auth_context = auth_context;
request.body = Request::Body {
.field = value1,
.val = value2
};
или такого:
Request request{
.auth_context = auth_context,
.body = Request::Body{
.field = value1,
.val = value2
}
};
Хотя можно обойтись таким:
Request request{
.auth_context = auth_context,
.body.field = value1,
.body.value = value2
};
Metadata
Metadata
Assignees
Labels
No labels