Здравствуйте, rg45, Вы писали:
M>>Просто и понятно.
R>Ну и чем это проще и понятнее, чем:
R>https://coliru.stacked-crooked.com/a/83124dc3a3facc5d
R>R>int func(MyVariant v)
R>{
R> return std::visit([]<typename T>(const T& t) {
R> if constexpr (std::same_as<T, A>)
R> {
R> doSomething(t);
R> }
R> else if constexpr (std::same_as<T, B> or std::same_as<T, C>)
R> {
R> std::cout << "Error: B or C not allowed here\n";
R> return -1;
R> }
R> return 0; // OK
R> }, v);
R>}
R>
в ветке
doSomething(t); я не хочу выходить из func. Надо было там написать после
if продолжение кода —
//.... Поправлю для остальных
R>И это не единственный, и не лучший, кстати, вариант использования — тут на перегрузках можно реально по красоте всё сделать.
R>И я привёл законченный работающий пример, а тебе ещё нужно наколбасить энумов к своим вариантам. В итоге нифига не проще будет, а будет реально куча.
Генератор
А можно в рантайме, в какой-нибудь другой подсистеме, сформировать список альтернатив, которые нужно обработать, и передать в обработчик вместе с variant'ом?