C ++在使用嵌套联合定义结构时期望表达式

时间:2019-04-10 02:37:24

标签: c++ struct c-preprocessor union preprocessor-directive

我在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;
}

1 个答案:

答案 0 :(得分:1)

Live code

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