如何在类方法中创建一个依赖于即时的静态变量?

时间:2010-12-02 22:45:55

标签: c++ static member-functions

我在一个类中有一个函数或多或少的工作如下:

class Player {
private:
    Object* minions[16]
public:
    void Summon(Object* obj);
};

Player::Summon(Object* obj) {
    static int i = 0;
    if (i == 16)
        return;
    minions[i] = obj;
    i++;
}

尝试使用多个播放器时会出现问题:

Player playerone;
Player playerthree;
playerone.Summon(new Object("o1"));
playerthree.Summon(new Object("o2"));

o1位于playerone.minions[0],正如预期的那样,o2位于playerthree.minions[1]Summon()函数使用相同的i Summon()变量。有没有办法让i函数对单个实例使用静态i变量,但是为每个实例使用单独的for变量?我知道我可以做minions[]循环到NULL中等于i的第一个点,或者让Player直接成为{{1}}的成员,但我想知道在我做其中任何一个之前是否有更好的方法。

4 个答案:

答案 0 :(得分:2)

Object* minions[16];更改为std::vector<Object*> minions;。这样你就可以使用minions.size()知道有多少,或minions.push_back(obj);添加一个而不用担心数组索引的东西。

答案 1 :(得分:1)

为什么不简单地将i放在每个Player中?我将它重命名为summonned_minion_count,但这是你想要做的事情的实际意图。

答案 2 :(得分:0)

您需要将i成为Player的成员变量。

或者甚至更好,你可以做这样的事情:

#include <vector>

class Player {
private:
    static int const MAX_MINION_COUNT = 16;
    std::vector<Object *> minions;
public:
    void Summon(Object* obj) {
        if (minions.size() < MAX_MINION_COUNT) {
            minions.push_back(obj);
        }
    }
};

答案 3 :(得分:0)

使局部变量静态有效地使其成为全局变量。您只需将i设为class Player的数据成员即可。并且可能给它一个更具描述性的名称。