访问活跃的工会成员
有没有一种简单的方法来了解哪个union成员是活跃的?
一个例子:
union Read_Value{
char ch;
float number;
string str;
}
假设一个 void 函数从输入文件流中读取,并Read_Value根据读取的变量类型进行初始化。假设我不知道这个函数是如何工作的,我怎么知道这三个成员中的哪一个是活跃的?
回答
裸机union无法告诉您哪个是活动元素。你必须自己跟踪。
由于 C++17std::variant是“现代的union”。它有一个index()方法可以告诉您哪个是活动索引。来自cppreference 的示例:
#include <variant> #include <string> #include <iostream> int main() { std::variant<int, std::string> v = "abc"; std::cout << "v.index = " << v.index() << 'n'; v = {}; std::cout << "v.index = " << v.index() << 'n'; }可能的输出:
v.index = 1 v.index = 0