#pragma once class Action { public: virtual void run() = 0; virtual void undo() = 0; virtual size_t memory() = 0; virtual ~Action(){}; }; class ActionManager { public: static ActionManager I; std::stack> m_actions; size_t m_memory = 0; static void add(Action* action); static void undo(); static void clear(); static bool empty() { return I.m_actions.empty(); } };