如何检查联盟的“最终”类型?

时间:2014-07-07 09:45:05

标签: c++ if-statement unions

让我们说我有这样一个联盟:

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

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

例如:[Pseudo-Code]

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

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

1 个答案:

答案 0 :(得分:4)

你做不到。您需要事先知道初始化值,或者将union添加到更大的struct中。 See this other SO question

<强>更新

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

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