#pragma once #include #include #include #include #include #include #include "Game.h" class GameInternal; class GameFactory { public: using CreateFunc = std::function; static GameFactory& instance() { static GameFactory factory; return factory; } void registerClass(CreateFunc createFunc) { this->creatorFunc = createFunc; } Game* create(GameInternal* gameInternal) { if (this->creatorFunc == nullptr) { throw std::runtime_error("No game implementation registered!"); return nullptr; } Game* game = (this->creatorFunc)(); game->gameInternal = gameInternal; return game; } private: CreateFunc creatorFunc = nullptr; };