gpt4 book ai didi

c++ - 如何检查 "final" union 类型?

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:04 25 4
gpt4 key购买 nike

假设我有一个这样的联盟:

union checkUnion{
std::string* str;
bool someBool;
int aNumber;
};

如何检查在程序中选择了这 3 个项目中的哪一个?我想对每个项目进行单独的 if 查询。

例如:[伪代码]

if (checkUnion == string)
{
//CODE
}

if (checkUnion == bool)
{
//DIFFERENT CODE
}

最佳答案

你不能。您要么需要事先知道初始化值,要么将 union 添加到某个更大的结构中。 See this other SO question .

更新:

C++ 上的 union 只是为了与 C 代码兼容,您很少需要它们。即使您正在创建一些奇特的网络协议(protocol),您也会使用像 google-protobuf 这样的工具。而不是手工制作的 union 。 union 的最初目标是在不同字段或结构上重叠字节,以在保留编译器支持的同时在这些数据结构上保存尽可能多的字节。

在 C++ 上,您最好创建一个类层次结构,并将每个变体作为基类的子类。在内部你也会有一个鉴别器,the C++ vtable , 但歧视是由编译器处理的。与手工制作的并集相比,它更易于维护且更不容易出错。

关于c++ - 如何检查 "final" union 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24607590/

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