Size: a a a

2020 October 23

AG

Anton Glukhov in pro.cxx
Вызывать функцию дополнительно не хочется. может это можно средствами variant/visit как-то сделать
источник

VS

Vlad Serebrennikov in pro.cxx
в 20 стандарте можно, наверное
сделать generic лямбду и концептами обозначить множество поддерживаемых типов
источник

AG

Anton Glukhov in pro.cxx
C++17
источник

N

Neargye in pro.cxx
std::visit(overloaded{
          [](auto &s, const event_run &e) -> std::optional<state> {
if constexpr (std::is_same_v<decltype(s), state_stopped>) foo
else if constexpr (std::is_same_v<decltype(s), state_run> || std::is_same_v<decltype(s), state_terminating>) bar }
}
источник

N

Neargye in pro.cxx
что такое можно попробовать, но вербозно все равно
источник

AG

Anton Glukhov in pro.cxx
нууу. я же специально уходил от else if  и switch case в реализации state machine. а в итоге к этому же и пришел 😂
источник

AG

Anton Glukhov in pro.cxx
уж лучше функцию bar наверное буду дергать из разных лямбд
источник

VS

Vlad Serebrennikov in pro.cxx
да, тоже решение
главное, что простое и понятное
источник

AG

Anton Glukhov in pro.cxx
ну так то да. я думал мож чето декларативное есть
источник

AG

Anton Glukhov in pro.cxx
а constexpr в этом примере имеет смысл?
источник

VS

Vlad Serebrennikov in pro.cxx
Anton Glukhov
а constexpr в этом примере имеет смысл?
да
переносит проверку условий на этап компиляции
источник

AG

Anton Glukhov in pro.cxx
ок, спасибо!
источник
2020 October 24

АР

Андрей Руссков... in pro.cxx
Vlad Serebrennikov
да
переносит проверку условий на этап компиляции
Не совсем. Ветка будет подавлена компилятором и так и эдак, но если она будет синтаксически некорректной, то без if constexpr компилятор ругнется
источник

АР

Андрей Руссков... in pro.cxx
мне кстати интересно почему комитет не внес overloaded в стандарт, хотя его реализация буквально занимает две строчки и приведена на cppreference
источник

AG

Anton Glukhov in pro.cxx
хмм, а if constexpr (std::is_same_v<decltype(s), state_run_inf>) не срабатывает. Может это быть из-за флага no-rtti?
источник

AG

Anton Glukhov in pro.cxx
Ссылку хочет: if constexpr (std::is_same_v<decltype(s), state_run_inf&>)
источник

AG

Anton Glukhov in pro.cxx
Проблема только, что я не знаю можно ли это отловить на этапе компиляции
источник

N

Neargye in pro.cxx
Anton Glukhov
Ссылку хочет: if constexpr (std::is_same_v<decltype(s), state_run_inf&>)
if constexpr (std::is_same_v<std::decay_t<decltype(s)>, state_run_inf>)
источник

AG

Anton Glukhov in pro.cxx
Neargye
if constexpr (std::is_same_v<std::decay_t<decltype(s)>, state_run_inf>)
сэнкс 👍
источник

АР

Андрей Руссков... in pro.cxx
вообще ты можешь generic и не-generic лямбды смешивать
источник