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