我有一些var = std::variant<std::monostate, a, b, c>
,其中a,b,c
是某些类型。
在运行时,如何检查var
包含的类型?
在官方文档中,我找到了这样的信息:如果var
包含类型a
,并且我写std::get<b>(var)
,将会抛出一个异常。因此,我考虑了以下解决方案:
try {
std::variant<a>(var);
// Do something
} catch(const std::bad_variant_access&) {
try {
std::variant<b>(var);
// Do something else
} catch(const std::bad_variant_access&) {
try {
std::variant<c>(var);
// Another else
} catch (const std::bad_variant_access&) {
// std::monostate
}
}
}
但是这太复杂和丑陋了!有没有更简单的方法来检查 std::variant
包含的类型?
std::variant<std::monostate, a, b, c>
呢?这让我觉得像一个 XY 问题。 - bracco23