是否可以在不知道原始枚举类的情况下更改枚举类变量的特定类型?

时间:2016-11-30 22:37:17

标签: c++ templates stl metaprogramming

很抱歉,如果问题标题有点令人困惑。在我的游戏引擎中,我在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;?

0 个答案:

没有答案