#include <iostream>
#include <variant>
#include <string>
// 定义一个 variant 类型,它可以存储 int, double 或 std::string
using MyVariant = std::variant<int, double, std::string>;
int main() {
// 创建一个 variant 变量并初始化为 int 类型
MyVariant v1 = 42;
// 使用 std::get 访问 variant 中的值
if (v1.index() == 0) { // 检查是否是 int 类型
std::cout << "v1 contains an int: " << std::get<int>(v1) << '\n';
}
// 修改 variant 的内容为 double 类型
v1 = 3.14;
// 使用 std::visit 访问 variant 中的值
std::visit([](auto&& arg) {
using T = std::decay_t<decltype(arg)>; // 获取参数的实际类型
if constexpr (std::is_same_v<T, int>) {
std::cout << "v1 contains an int: " << arg << '\n';
} else if constexpr (std::is_same_v<T, double>) {
std::cout << "v1 contains a double: " << arg << '\n';
} else if constexpr (std::is_same_v<T, std::string>) {
std::cout << "v1 contains a string: " << arg << '\n';
}
}, v1);
// 修改 variant 的内容为 std::string 类型
v1 = std::string("Hello, World!");
// 再次使用 std::visit 访问 variant 中的值
std::visit([](auto&& arg) {
using T = std::decay_t<decltype(arg)>; // 获取参数的实际类型
if constexpr (std::is_same_v<T, int>) {
std::cout << "v1 contains an int: " << arg << '\n';
} else if constexpr (std::is_same_v<T, double>) {
std::cout << "v1 contains a double: " << arg << '\n';
} else if constexpr (std::is_same_v<T, std::string>) {
std::cout << "v1 contains a string: " << arg << '\n';
}
}, v1);
return 0;
}
std::variant 是 C++17 引入的一个类型安全的联合体(union),它可以存储多种不同类型的值。MyVariant 类型,它可以存储 int, double 或 std::string。std::get 来访问 variant 中的值,但需要先检查当前存储的是哪种类型。std::visit,它可以通过模板和 lambda 表达式来处理 variant 中的不同类型。std::visit 允许我们编写更简洁和类型安全的代码,而不需要显式地进行类型检查。上一篇:c++ algorithm库
下一篇:c++定义字符串
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站