0

私の C++ プロジェクトには、Trap というクラスがあります。トラップは NPC であり、NPC はエンティティです。今、私はすべての NPC をループして、それらを処理したいと考えています。たとえば、トラップを更新したいとします。私は次の方法でそれを行います。

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 に答える