Мне нужно было реализовать FSM на шаблонах, описывается таблица переходом, из неё извлекаются все типы состояний и для хранения текущего состояния я взял std::veriant, он идеально подходит для этого. Во время выполнения состояния могут переключаться по разному и нужно было реализовать функцию, которая создаёт std::variant с конкретным типом внутри и этот тип определяется индексом.
В STL есть compiletime решение: std::variant(std::in_place_index<I>) , но мне нужен был аналог для runtime.
Мне нужно было реализовать FSM на шаблонах, описывается таблица переходом, из неё извлекаются все типы состояний и для хранения текущего состояния я взял std::veriant, он идеально подходит для этого. Во время выполнения состояния могут переключаться по разному и нужно было реализовать функцию, которая создаёт std::variant с конкретным типом внутри и этот тип определяется индексом. В STL есть compiletime решение:
std::variant(std::in_place_index<I>)
, но мне нужен был аналог для runtime.Благодаря сообществу нашлось решение:
Написать такое под силу не многим, хотелось бы иметь готовые решения в STL.
Моя библиотека FSM: