Пытаясь создать Entity-Component-System на C ++, я столкнулся с некоторыми проблемами, связанными с незнанием языка.
С классом Entity, который содержит интерфейс IComponent (который больше похож на флаг, говорящий «Я храню данные»), у меня есть метод Add strong>, который добавляет компонент к сущности, если в нем уже нет другого 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?
vector<IComponent>
Вы, вероятно, этого не хотите, ноvector<IComponent*>
. См. Также: Нарезка объектов - person Igor Tandetnik   schedule 24.06.2019IComponent
экземплярами? ПомимоAdd
, как вы планируете их использовать? - person Igor Tandetnik   schedule 24.06.2019HasComponent<Bar>
? Как только вы это узнаете, вы также узнаете, как предотвратить дублирование вAdd
. - person Igor Tandetnik   schedule 24.06.2019