std::visit
时间: 2023-11-07 12:51:58 浏览: 126
std::visit是C++17中引入的一个函数模板,用于在std::variant对象上执行特定的操作。它接受一个可调用对象(函数、函数对象或Lambda表达式)和一个std::variant对象,然后根据std::variant当前的活动类型调用对应的可调用对象。这样可以避免使用if-else或switch语句来处理std::variant的各种情况。
使用std::visit的一般步骤如下:
1. 定义一个可调用对象,该对象的参数类型与std::variant中的各个类型相对应。
2. 调用std::visit,并将可调用对象和std::variant对象作为参数传入。
下面是一个使用std::visit的示例:
```
#include <iostream>
#include <variant>
struct PrintVisitor {
void operator()(int value) const {
std::cout << "int value: " << value << std::endl;
}
void operator()(float value) const {
std::cout << "float value: " << value << std::endl;
}
void operator()(const std::string& value) const {
std::cout << "string value: " << value << std::endl; }
};
int main() {
std::variant<int, float, std::string> var;
var = 10;
std::visit(PrintVisitor{}, var);
var = 3.14f;
std::visit(PrintVisitor{}, var);
var = "test";
std::visit(PrintVisitor{}, var);
return 0;
}
```
输出结果:
```
int value: 10
float value: 3.14
string value: test
```
阅读全文