0

在我的 C++ 项目中,我有一个名为 Trap 的类。陷阱是 NPC,NPC 是实体。现在我想遍历所有 NPC 并与他们一起做事。例如,我想要更新 Trap。我通过以下方式做到这一点。

for (vector<NPC>::iterator it = Enemies.begin(); it != Enemies.end(); ++it) {
    it->Update();
}

但现在 Update() 调用正在调用 NPC::Update() 方法。

我相信这是因为我使用迭代器的方式,但我不知道如何更好地做到这一点。使用不同类型的迭代?有一个简单的技巧吗?

4

2 回答 2

4

你有切片问题。

Enemies应该是std::vector<std::unique_ptr<NPC>>(或其他智能指针)或std::vector<NPC*>

于 2015-02-26T10:43:28.737 回答
0

您想要的是一个纯虚拟基类,它为您的派生类定义了所有基本功能。然后,您可以在子类中实现实际代码,并且仍然通过基类调用 update() 方法。

class Base
{
    virtual void update() = 0
}

class Implementation: public Base
{
    void update() { /*Do stuff*/ }
}

接下来创建一个vector< unique_ptr<Base> >(您需要的任何指针类型)并填充它,new( Implementation )然后您可以遍历您的向量并执行Base->update().

于 2015-02-26T11:00:48.977 回答