我在 Visual Studio 2010 中将一些旧代码从 C 移植到 C++,我遇到了这个问题:
typedef struct OptionDef {
const char *name;
int flags;
union {
void *dst_ptr;
int (*func_arg)(void *, const char *, const char *);
size_t off;
} u;
const char *help;
const char *argname;
} OptionDef;
static const OptionDef options[] = {
{ "x", HAS_ARG, { .func_arg = opt_width }, "force displayed width", "width" },
...
现在失败并出现语法错误。我已经看到在 C++ 中静态初始化匿名联合的响应,但是重载构造函数将不起作用,因为我正在设置一个数组。有没有其他方法可以做到这一点(而不是仅仅重写代码不使用联合)?
更新:我应该更具体 - 数组包含使用联合的所有部分的不同初始化器:
static int is_full_screen;
{ "fs", OPT_BOOL, { &is_full_screen }, "force full screen" },
所以仅仅改变工会的顺序是无济于事的。