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

问题描述 投票:1回答:1

我在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;
}
c++ struct c-preprocessor union preprocessor-directive
1个回答
1
投票

Live code

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

© www.soinside.com 2019 - 2024. All rights reserved.