C++:用索引数组替换Long Switch()语句?

Bun*_*ori 0 c++ arrays

为了动态创建游戏对象,我使用ObjectTypeID,它是unsigned int,并让它在很长的switch()语句中进行比较.如果找到适当的swith case,我创建对象并存储它.因为我已经拥有90个游戏对象,所以Switch()已经很长并且将增长到大约300个对象.

为了避免超长的switch()语句,并提高速度,完美的候选者将利用索引数组来存储所有对象类型(ObjectTypeID从0向上增加).有没有办法,如何在数组中存储对象类型?

我想用这样的东西:

  • aObjectTypesArray [ObjectTypeID]*pNewDynamicObject = new aObjectTypesArray [ObjectTypeID];

请问如何在我的情况下如何利用动态数组索引,以及如何避免超长的switch()语句?您的建议可能与我的想法不同,关键是使用数组索引并删除long switch()语句.

Eri*_*rik 8

在c ++中,类不是第一类对象,因此您无法直接执行所需的操作.但是,如果游戏对象继承自公共基类,则只需使用工厂.

class GameObject {
};

class GameObjectFactory {
public:
  virtual GameObject * create() = 0;
};

class SomeGameObject : public GameObject {
};

class SomeGameObjectFactory : public GameObjectFactory {
  virtual GameObject * create() { return new SomeGameObject; }
};
Run Code Online (Sandbox Code Playgroud)

然后将工厂实例存储在数组中.