访问活跃的工会成员

Ade*_*ini 1 c++ unions c++14

有没有一种简单的方法来了解哪个union成员是活跃的?

一个例子:

union Read_Value{
 char ch;
 float number;
 string str;
}
Run Code Online (Sandbox Code Playgroud)

假设一个 void 函数从输入文件流中读取,并Read_Value根据读取的变量类型进行初始化。假设我不知道这个函数是如何工作的,我怎么知道这三个成员中的哪一个是活跃的?

for*_*818 5

裸机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';
}
Run Code Online (Sandbox Code Playgroud)

可能的输出:

v.index = 1
v.index = 0
Run Code Online (Sandbox Code Playgroud)