Здравствуйте, Marty, Вы писали:
M>Как-то так:
| | Скрытый текст |
| | M>M>int func(MyVariant v)
M>{
M> auto kind = getKind(v);
M> if (kind==Kind::A)
M> {
M> doSomething(get<Kind::A>(v));
M> // doSomething(get(kind, v)); // или даже так
M> }
M> else if (kind==Kind::B || kind==Kind::C)
M> {
M> log << "Error: " << enum_serialize(kind) << " not allowed here\n";
M> return -1; // error - B or C not allowed here
M> }
M> else
M> {
M> return 0; // OK
M> }
M>}
M>
|
| | |
std::visit([](auto&& t) {
if constexpr(std::is_same_v(t, Kind::A))
{
}
else if constexpr(std::is_same_v(t, Kind::B))
{
}
}, v);
Можно еще и приукрасить, как
тут написано.