C++ 在使用嵌套联合定义结构时需要一个表达式

C++ Expected an expression when defining struct with nested union

我在 C++ 中有一个带有嵌套联合的结构,如下所示:

typedef enum {            
  VAL_BOOL,               
  VAL_NIL, 
  VAL_NUMBER,             
} ValueType; 

typedef struct {  
  ValueType type; 
  union {         
    bool boolean; 
    double number;
  } as; 
} Value; 

我正在尝试构建一个 #define 函数来使这些值的初始化更具可读性,这是我目前所拥有的,但它无法编译:

#define NUMBER_VAL(value) ((Value){ VAL_NUMBER, { .number = value } })

当使用 NUMBER_VAL(val) 时,上述实现在编译时生成以下错误:expected an expression

这里的目标是能够通过编写如下内容来定义 Value

double dub = 1.23;
Value val = NUMBER_VAL(dub);

或者将它传递给一个函数,像这样:

void process_value(Value value);
...
double dub = 45.6; 
process_value(NUMBER_VAL(dub));

有没有办法将这个 #define-ition 转换成一个表达式,让我可以这样使用它?或者我唯一的选择是编写一个合适的函数来为我构建这些结构?


郑重声明,我知道以下内容会奏效,但我希望内容更简洁。

Value NUMBER_VAL(double value) {
    Value val;
    val.type = VAL_NUMBER;
    val.as.number = value;
    return val;
}

Live code.

在 C++ 中,联合可以有构造函数。在您的 struct 中,您可以定义构造函数重载以初始化联合成员以及联合标记,即 type.