gpt4 book ai didi

C++ 在使用嵌套 union 定义结构时需要一个表达式

转载 作者:行者123 更新时间:2023-11-30 04:48:58 24 4
gpt4 key购买 nike

我在 C++ 中有一个带有嵌套 union 的结构,如下所示:

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

最佳答案

Live code .

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

关于C++ 在使用嵌套 union 定义结构时需要一个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com