#ifndef WORLD_WORLDGENERATORS_HPP_ #define WORLD_WORLDGENERATORS_HPP_ #include #include #include #include class Content; typedef WorldGenerator* (*gen_constructor)(const Content*); class WorldGenerators { static inline std::map generators; public: template static void addGenerator(std::string id); static std::vector getGeneratorsIDs(); static std::string getDefaultGeneratorID(); static std::unique_ptr createGenerator( const std::string& id, const Content* content ); }; template void WorldGenerators::addGenerator(std::string id) { generators[id] = [](const Content* content) { return (WorldGenerator*)new T(content); }; } #endif /* WORLD_WORLDGENERATORS_HPP_ */