You might already be thinking that one potential use for std::variant would be to represent the notion of "Maybe I have an object, and maybe I don't." For example, we could represent the "maybe I don't" state using the standard tag type std::monostate:
std::map<std::string, int> g_limits = {
{ "memory", 655360 }
};
std::variant<std::monostate, int>
get_resource_limit(const std::string& key)
{
if (auto it = g_limits.find(key); it != g_limits.end()) {
return it->second;
}
return std::monostate{};
}
void test()
{
auto limit = get_resource_limit("memory");
if (std::holds_alternative<int>(limit)) {
use( std::get<int>(limit) );
} else {
use( some_default );
}
}
You'll...