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;
}
在 C++ 中,联合可以有构造函数。在您的 struct
中,您可以定义构造函数重载以初始化联合成员以及联合标记,即 type
.
我在 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
中,您可以定义构造函数重载以初始化联合成员以及联合标记,即 type
.