Я пытаюсь найти удобный способ для инициализации 'pod' С++ structs. Теперь рассмотрим следующую структуру:
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?
Чтобы достичь того же (или, по крайней мере, подобного) в С++, как в примере /* A */
, мне пришлось бы реализовать идиотский конструктор:
FooBar::FooBar(int foo, float bar) : foo(foo), bar(bar) {}
// ->
/* C */ FooBar fb(12, 3.4);
Это хорошо для кипящей воды, но не подходит для ленивых людей (лень - это хорошо, правда?). Кроме того, это очень плохо, как пример /* B */
, поскольку он явно не указывает, какое значение переходит к тому элементу.
Итак, мой вопрос в основном заключается в том, как я могу достичь чего-то похожего на /* A */
или лучше на С++?
В качестве альтернативы, я был бы в порядке с объяснением, почему я не должен этого делать (то есть, почему моя психическая парадигма плоха).
ИЗМЕНИТЬ
Удобно, я имею в виду также поддерживаемое и не избыточное.