2015-07-13 74 views
0

我试图创建一种方法来保存我C++游戏中的所有实体,因为它们仅限于一种类型,所以数组无法工作。我需要存储与Entity类相关的所有内容,并且它都是衍生物。我一直试图通过一种方式来存储所有游戏实体,我可以循环遍历它们并绘制它们。还没有找到解决方案。在C++游戏中存储所有实体的最佳方法

+0

你可以提供一个基本的代码?你想循环不具有相同类型的元素吗? – styko

+0

具有'Entity'类型的数组将允许您将任何属于'Entity'的东西包括在内,包括子类,所以这实际上不是不使用数组的原因。但是固定大小通常是更多原因。 –

回答

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

-2

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

+0

'std :: vector'会和数组产生同样的问题。 – juanchopanza

相关问题