c++17可用variant,实现多类型变量。比起optional,自由度更高。
如下代码判断一个数字是否大于5,如果大于5,输出bignumber,否则输出enum值
#include <iostream>
#include <variant>
#include <string>
enum class ErrorCode {
BIGNUMBER = 0, SMALLNUMBER=1, ERROR=2
};
std::variant<std::string, ErrorCode> NumberGame(int number) {
std::variant<std::string, ErrorCode> name;
if (number > 5) {
name = "big number";
}
else {
name = ErrorCode::SMALLNUMBER;
}
return name;
}
int main() {
auto name = NumberGame(4);
if (std::get_if<std::string>(&name)) {
std::cout << std::get<std::string>(name);
}
else {
auto a = std::get<ErrorCode>(name);
if (a == ErrorCode::SMALLNUMBER) {
std::cout << 1;
}
}
}
输出:1