具有静态方法的类的C ++模板

时间:2016-02-15 09:04:55

标签: c++ templates c++11 refactoring cocos2d-x

我目前正在使用cocos2dx引擎编写游戏,我有一个级别管理器,可以跟踪当前级别和需要加载的场景。我想避免使用long if语句,例如:

Scene* scene;
if (level == 1)
{
      scene = Game_Scene1::createScene();
}
else if (level == 2)
{
      scene = Game_Scene2::createScene();
}
else if (level == 3)
{
      scene = Game_Scene3::createScene();
}
(...)
else if (level == 10)
{
      scene = Game_Scene10::createScene();
}

Director::getInstance()->replaceScene(TransitionFade::create(0.5, scene, Color3B(0,0,0)));

screateScene()方法是一种静态方法

static cocos2d::Scene* createScene();

我该怎样做才能删除" if语句?所以它看起来像这样:

Scene* scene = getScene(level, sceneClass::createScene());

它将采用正确的类(即:Game_Scene1Game_Scene2等。)

这样的问题有一个很好的解决方案吗?标题说模板,但我不确定这个解决方案是否是模板。

1 个答案:

答案 0 :(得分:3)

一个简单的解决方案是使用指针函数表。

您可以将表格声明为

typedef cocos2d::Scene *(*PtfCreateScene)();
PtfCreateScene tab[10];

tab[0] = Game_Scene1::create_scene;
tab[1] = Game_Scene2::create_scene; ... 

使用此解决方案,您可以使用level作为索引来调用关联的create_scene函数。从而避免了if分支。

scene = tab[level - 1]();

您必须检查索引的正确性,以避免内存不足。

希望我回答你的问题。不要犹豫,询问您是否需要更多解释。