#pragma once template class DeadSimpleFSM { protected: S _state = S::START; public: virtual void event(E event) = 0; void state(S next_state) { _state = next_state; } }; #define FSM_T(S, F) case S: F(); break