Я пытаюсь найти удобный способ инициализации структур "pod" в C ++.Теперь рассмотрим следующую структуру:
struct FooBar {
int foo;
float bar;
};
// just to make all examples work in C and C++:
typedef struct FooBar FooBar;
Если я хочу удобно инициализировать это в C (!), Я мог бы просто написать:
/* A */ FooBar fb = { .foo = 12, .bar = 3.4 }; // illegal C++, legal C
Обратите внимание, что я хочу явно избежатьследующие обозначения, потому что мне кажется, что меня заставляют сломать шею, если я изменю что-нибудь в структуре в будущем:
/* B */ FooBar fb = { 12, 3.4 }; // legal C++, legal C, bad style?
Для достижения того же (или, по крайней мере, аналогичного)) в C ++, как в примере /* A */
, мне пришлось бы реализовать идиотский конструктор:
FooBar::FooBar(int foo, float bar) : foo(foo), bar(bar) {}
// ->
/* C */ FooBar fb(12, 3.4);
, который хорош для кипячения воды, но не подходит для ленивых людей (лень - это хорошо, верно?).Кроме того, это в значительной степени так же плохо, как в примере /* B */
, поскольку в нем явно не указано, какое значение соответствует какому члену.
Итак, мой вопрос заключается в том, как мне добиться чего-то похожего на /* A */
или лучше в C ++?В качестве альтернативы, я мог бы согласиться с объяснением, почему я не должен этого делать (то есть, почему моя умственная парадигма плохая).
РЕДАКТИРОВАТЬ
По удобно , я имею в виду также ремонтопригодно и не резервируется .