#pragma once #include #include #include template class FSM { T previousState; T &state; std::map> handlers; public: using Transaction = std::pair; FSM(T &value) : state(value), previousState(value) {} ~FSM() = default; void Update() { auto handler = handlers[Transaction{previousState, state}]; if (handler) handler(); } void RegisterHandler(T state, std::function handler) { handlers[Transaction{state, state}] = handler; } void RegisterTransactionHandler(Transaction transaction, std::function handler) { handlers[transaction] = handler; } };