#pragma once class Action { public: virtual void run() = 0; virtual void undo() = 0; }; class ActionManager { public: static ActionManager I; std::stack> m_actions; static void add(Action* action) { I.m_actions.emplace(action); } static void undo() { I.m_actions.top()->undo(); I.m_actions.pop(); } };