【发布时间】:2014-12-29 23:36:59
【问题描述】:
我正在考虑两种解决方案来为我的 SFML 游戏创建资源管理器。两者都需要模板(我是模板新手),但我更喜欢其中一种解决方案,即使我真的不知道如何使它工作。
我想做这样的事情:
std::map<string, class> resources;
template<class T> T getResource(std::string name){
return (T) resources.find(name);
}
换句话说,我希望将所有资源存储在一个类中,并且只有一个函数可以获取资源,并且该函数应始终返回资源的类型 - 这样,为了要加载资源,我可以这样做:
Texture texture = resourceManager.getResource("mytexture.png");
但我不知道如何让它工作。
我的第二种方法是模板化一个类,然后实例化多个资源管理器,每个资源管理器一个。
template<class Res> class ResourceManager {
std::map<string, Res> resources;
...
Res get(std::string name){
return resources.find(name); //Just to visualize. Of course there would be null checks etc in the real method
}
}
在我看来,第二个“解决方案”在代码方面看起来更简洁,但第一个更容易使用;而且我可以将方法设为静态,这样我就不必担心解耦了。
我真的不知道我应该把第二种方法的管理器实例放在哪里。可能我会将实例设为静态并将它们放在我的主类中,但这似乎并不正确。
【问题讨论】:
-
您可能想看看sftools generic resource manager 或Thor's Resources Tutorial。我会专注于有趣的东西(你的游戏)而不是那些耗时的细节。 ;-)
标签: c++ templates resources sfml