Я пытаюсь создать способ хранения всех сущностей в моей игре на C ++, массивы не будут работать, поскольку они ограничены одним типом. Мне нужно что-то хранить с классом Entity, и все его производные в нем. Я целый день пытался найти способ хранить все игровые объекты таким образом, чтобы я мог просто просмотреть их все и нарисовать. Все еще не нашли решение.
Если предположить, Entity
это некоторый базовый класс, из которого происходят многие вещи, у вас может быть контейнер (любой контейнер подходит, но std::vector
это хорошее место для начала, если у вас нет каких-то других конкретных требований).
class Entity
{
public:
virtual void Draw() = 0;
};
class Atom : public Entity
{
public:
void Draw() override {}
};
class Environment : public Entity
{
public:
void Draw() override {}
};
int main()
{
std::vector< std::shared_ptr<Entity> > entities;
entities.push_back(std::make_shared<Atom>());
entities.push_back(std::make_shared<Environment>());
// Draw entities:
for (size_t ent = 0; ent < entities.size(); ++ent)
{
entities[ent]->Draw();
}
return 0;
}
Если Entity
это не какой-то базовый класс, вы также можете посмотреть в сторону boost::optional
Вы можете использовать std :: vector. Он имеет много встроенных функций для простого манипулирования данными, и вы можете использовать его с любым типом.