#pragma once #include #define FSM_EV(S, F) case S: F(); break #define FSM_STATE(S, F, E) case S: fmt::println(">>> " #S ":" #F ":{}", int(E)); F(E); break template class DeadSimpleFSM { protected: S _state = S::START; public: virtual void event(E event) = 0; void state(S next_state) { _state = next_state; } bool in_state(S state) { return _state == state; } };