我正在制作的程序需要各种类型资源的访问池,但只能访问少数几个类。资源池也是它自己的类。因此,我决定为资源池使用静态类,并让其他人以这种方式访问它。
但是我在向池添加资源时遇到了一个奇怪的问题。每个池都表示为std :: map,插入后,映射仍为空。我猜这与静态类中的地图有关。这就是为什么地图不能按预期工作的原因吗?
资源池的相关代码
class ResourcePool {
private:
static ResourcePool m_ResourcePool;
public:
ResourcePool();
~ResourcePool();
static ResourcePool* Instance() { return &m_ResourcePool; }
// Where textures are stored. ci_less is for case comparison of names
std::map <std::string, TextureResource, ci_less> Textures;
TextureResource* getTexture(std::string handle);
};
如何使用的相关代码
Scene::Scene() {
Assets = ResourcePool::Instance();
}
TextureResource* Scene::add(std::string handle, TextureResource Texture) {
// Insertion fails
Assets->Textures.insert(std::make_pair(handle + "_tex", Texture));
// I use this line to debug, the map still shows up empty
unsigned size = Assets->Textures.size();
// look up that texture by its name
return Assets->getTexture(handle);
}
结果是,添加返回NULL,因为找不到任何内容。这个程序没有崩溃,因为我没有对纹理做任何事情,只是暂时测试插入。
答案 0 :(得分:0)
由于问题不包含正确的可编辑程序,我创建了一个:
#include <string>
#include <map>
#include <iostream>
class ResourcePool {
private:
static ResourcePool m_ResourcePool;
public:
static ResourcePool* Instance() { return &m_ResourcePool; }
std::map <std::string, std::string> Textures;
std::string getTexture(std::string handle) { return Textures[handle]; }
};
ResourcePool ResourcePool::m_ResourcePool;
int main()
{
ResourcePool* Assets = ResourcePool::Instance();
Assets->Textures.insert(std::make_pair("test_tex", "texture"));
std::cout << Assets->Textures.size() << std::endl;
std::cout << Assets->getTexture("test_tex") << std::endl;
return 0;
}
这可以在我的机器上按预期使用linux,g ++ Debian 4.3.2-1.1。 我想知道它是否适用于原版海报。