#pragma once #include class GameInstance; class World; struct WorldFactory { const char* world_name; World*(*factory)(GameInstance&); }; // Создаёт ассоцеативный список // В нём соспоставляются имина уровней и фабрики их классов #define WORLDS_LIST std::vector world_factories = // Генерирует элемент списка #define GENERATE_WORLD_FACTORY(Class, WorldName) WorldFactory{#WorldName, [](GameInstance& game_insance)->World* { return new Class(game_insance); }}, /* * Пример использования: WORLDS_LIST { GENERATE_WORLD_FACTORY(Sometime_class_world_One, WorldName_One) GENERATE_WORLD_FACTORY(Sometime_class_world_Two, WorldName_Two) }; */