【发布时间】:2017-03-08 21:14:01
【问题描述】:
我目前正在编写一些遇到此问题的程序:
我有一个Scene 类和一个MainScene 类:
class Scene{
Scene();
}
class MainScene : public Scene{
MainScene();
}
我想要做的是跟踪这样的场景列表:
std::map<std::string, Scene*> scenes;
然后我像这样向它添加一个场景:
MainScene* mainscene; //I do not make it a new because i want my scenemanager to handle that
scenes.emplace("mainscene", mainscene); // add it to the list
我有这样的功能:
template <class T>
void SceneManager::recreateScene(T* &scene)
{
scene = new T();
}
这样当我想使用函数loadscene时,我可以从列表中抓取场景并删除当前场景并使用函数recreateScene创建新场景。但是地图给了我Scene。所以当我使用recreateScene 时,它调用Scene() 的构造函数而不是MainScene()。但我需要它知道列表中的场景是MainScene,因此它会创建new MainScene() 而不是new Scene()。
【问题讨论】:
-
听起来你需要在你的场景类中有一个虚函数,并在每个“扩展”类中覆盖它。
-
混合模板和运行时多态性总是很困难的。而多态的目的是“忘记”特殊类型模板需要它们。
标签: c++ class templates pointers extending-classes