#ifndef SYSTEM_MANAGER_H_544E6056 #define SYSTEM_MANAGER_H_544E6056 #include #include #include #include #include "system.h" class SystemManager { private: std::list> loop; std::map systems; public: template void emplaceSystem(Game& game, Args&&... args) { std::unique_ptr ptr = std::unique_ptr(new T(game, std::forward(args)...)); std::type_index systemType = typeid(T); systems[systemType] = ptr.get(); loop.push_back(std::move(ptr)); } template T& getSystem() { std::type_index systemType = typeid(T); assert(systems.count(systemType) == 1); return *((T*)systems[systemType]); } }; #endif /* end of include guard: SYSTEM_MANAGER_H_544E6056 */