我试图找到一种方便的方法来初始化‘ pod’C + + 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?
要在 C + + 中实现与 /* A */
示例中相同(或者至少类似)的功能,我必须实现一个恼人的构造函数:
FooBar::FooBar(int foo, float bar) : foo(foo), bar(bar) {}
// ->
/* C */ FooBar fb(12, 3.4);
感觉多余又没必要。此外,它与 /* B */
示例一样糟糕,因为它没有明确说明哪个值指向哪个成员。
那么,我的问题基本上就是如何在 C + + 中实现类似于 /* A */
或者更好的东西?
或者,我可以解释为什么我不应该这样做(即为什么我的心理范式是坏的)。
剪辑
我说的 很方便也是指 可以维持和 不是多余的。