我在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
中,你可以定义构造函数重载来初始化union成员以及union标记,即type
。