在C ++游戏中存储所有实体的最佳方式

时间:2015-07-13 05:20:02

标签: c++ arrays entity-framework

我正在尝试创建一种方法来保存我的C ++游戏中的所有实体,因为数组仅限于一种类型,所以数组不起作用。我需要存储类Entity的所有东西,以及它的所有衍生物。我一整天都在尝试以一种方式存储所有游戏实体,我可以循环遍历它们并绘制它们。仍然没有找到解决方案。

2 个答案:

答案 0 :(得分:2)

假设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

答案 1 :(得分:-2)

您可以使用std :: vector。它有许多用于简单数据操作的内置函数,您可以将它用于任何类型。