很抱歉,如果问题标题有点令人困惑。在我的游戏引擎中,我在ResourceIdentifiers.hpp中定义了以下内容:
namespace Textures
{
enum class Id
{
Error = -1,
Player
};
}
我有很多类似的定义,音乐,字体等等(每一个都有一个名为Error的类型)。现在在ResourceHolder.hpp中,我有以下内容(当然会大幅减少):
template <typename Resource, typename Identifier>
class ResourceHolder
{
public:
Resource& get(Identifier id);
private:
Resource& getErrorResource(Identifier id);
std::map<Identifier, std::unique_ptr<Resource> > m_resourceMap;
};
在ResourceHandler.cpp中:
template <typename Resource, typename Identifier>
Resource& ResourceHolder<Resource, Identifier>::get(Identifier id)
{
auto found = m_resourceMap.find(id);
if (found == m_resourceMap.end())
{
return getErrorResource(id);
}
return *found->second;
}
我的问题在于getErrorResource()。由于get()返回对资源的引用,如果用户调用的资源未初始化,我想返回资源的错误版本,以便程序可以继续运行(在Texture&#中) 39; s的情况,id
想要的是Textures::Id::Error
)。问题是我不想用一堆ifs填充getErrorResource()来正确地将它设置为Error。有没有办法找出最初的枚举类id
,然后将其设置为相应的&#34;错误&#34;?