При попытке создать Entity-Component-System в C ++ я столкнулся с некоторыми проблемами, связанными с недостатком знаний языка.
С классом Entity , который содержит интерфейс IComponent (который больше похож на флаг с надписью "Я храню данные"), у меня есть метод Add , который добавляет Компонент к сущности, если в нем уже нет другого IComponent того же класса.
Вот пример упрощенного кода:
struct IComponent{};
struct Foo : IComponent{ int x;};
struct Bar : IComponent{ int y; };
class Entity{
vector<IComponent*> entityComponents;
void Add(IComponent* componentToAdd){
if("entityComponents" does not contain the class of "componentToAdd")
entityComponents.add (componentToAdd)
}
}
Мой ожидаемый результат будет
Entity e;
Foo f;
Bar b;
Foo anotherF;
e.Add(f); // Works
e.Add(b); // Works
e.Add(anotherF); // Does not work because another
//item in the array already inherits Foo
Но я не знаю, как получить базовый класс Foo и Bar из списка IComponents и проверить, повторяются ли они.
Как я могу получить их? Как я могу привести IComponent к Foo, если Foo есть в списке IComponent?