массивы — лучший способ хранить все сущности в игре C ++

Я пытаюсь создать способ хранения всех сущностей в моей игре на C ++, массивы не будут работать, поскольку они ограничены одним типом. Мне нужно что-то хранить с классом Entity, и все его производные в нем. Я целый день пытался найти способ хранить все игровые объекты таким образом, чтобы я мог просто просмотреть их все и нарисовать. Все еще не нашли решение.

0

Решение

Если предположить, 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

2

Другие решения

Вы можете использовать std :: vector. Он имеет много встроенных функций для простого манипулирования данными, и вы можете использовать его с любым типом.

-2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector