C++17增加了variant类型,有点像union,可以用于表示多种类型的混合体,但同一时间只能用于代表一种类型的实例。
variant提供了index成员函数,该函数返回一个索引,该索引用于表示variant定义对象时模板参数的索引(起始索引为0),同时提供了一个函数holds_alternative
- #include
- #include
- #include
- using namespace std;
-
- int main(){
- variant<int, double, string> d;
- cout<
index()<//输出:0 - d = 3.14;
- cout<
index()<//输出:1 - d = "hi";
- cout<
index()<//输出:2 -
- cout<<holds_alternative<int>(d)<
//输出:0 - cout<<holds_alternative<double>(d)<
//输出:0 - cout<<holds_alternative
(d)<//输出:1 - return 0;
- }
构造:
有几点需要注意:
1.variant不能使用空变量、具有引用成员的变量、具有c样式数组成员的变量和具有不完整