Я работаю над простой структурой для создания 2D игр. Он использует компоненты и системы, которые будут варьироваться от игры к игре.
Чтобы другие компоненты движка могли легко зацикливаться на всех возможных системах и / или компонентах, я бы хотел, чтобы они знали, как только одна из них будет включена (каждая имеет свой собственный заголовочный файл), таким образом, создав список всех возможных типов компонентов и типов систем.
В настоящее время я решил эту проблему с помощью структуры Register, которая помещается внизу после определения системы или компонента, передавая этот компонент / системный указатель в качестве аргумента конструктору структуры Register, т.е.
std::vector<Component*> Components
struct Register{
Register(Component* newComponent){
Components.push_back(newComponent);
}
}
Который затем используется в нижней части заголовка каждого компонента:
Register 2DPosReg(&2DPos);
Это гарантирует, что прежде чем мы перейдем к нашему основному коду, все компоненты перечислены в Компонентах. Таким же образом я также добавляю имена этих компонентов и некоторые другие детали к некоторым глобальным векторам.
Тем не менее, создание ненужного временного объекта, который никогда не используется просто для выполнения кода в его конструкторе, кажется излишне грязным.
Есть ли другой способ, при котором заголовок будет «известен» остальной части кода?
Я бы хотел избежать моего предыдущего решения, где у меня была длинная функция Register (& 2DPos, & Vel, & Acc, ... и т. Д.), Которая регистрировала бы все опции, поскольку любые изменения в используемых компонентах потребовали бы повторного редактирования этого функция.
(Кроме того, первый вопрос о переполнении стека, извинения, если он длинный / есть ошибки новичков)