J'essaie de trouver un moyen pratique pour initialiser 'pod' C++ des structures. Maintenant, considérons la structure suivante:
struct FooBar {
int foo;
float bar;
};
// just to make all examples work in C and C++:
typedef struct FooBar FooBar;
Si je veux idéalement initialiser dans C (!), Je pourrais écrire tout simplement:
/* A */ FooBar fb = { .foo = 12, .bar = 3.4 }; // illegal C++, legal C
Notez que je veux éviter explicitement la notation suivante, parce qu'il me frappe comme étant fait de me casser le cou si je change quelque chose dans la structure dans l'avenir:
/* B */ FooBar fb = { 12, 3.4 }; // legal C++, legal C, bad style?
Pour obtenir le même (ou au moins similaire) en C++ comme en /* A */
exemple, j'aurais à mettre en œuvre un idiot constructeur:
FooBar::FooBar(int foo, float bar) : foo(foo), bar(bar) {}
// ->
/* C */ FooBar fb(12, 3.4);
Ce qui est bon pour l'ébullition de l'eau, mais ne convient pas pour les paresseux (la paresse est une bonne chose, non?). Aussi, il est à peu près aussi mauvais que l' /* B */
exemple, comme il ne fait pas explicitement état qui passe par les états.
Donc, ma question est fondamentalement la façon dont je peux réaliser quelque chose de similaire /* A */
ou mieux en C++?
Sinon, je serais d'accord avec une explication des raisons pour lesquelles je ne devrais pas envie de le faire (c'est à dire pourquoi mon mental paradigme est mauvais).
MODIFIER
En pratique, je veux dire aussi maintenable et non redondantes.