我有一个包含枚举类的类。
class Shader {
public:
enum class Type {
Vertex = GL_VERTEX_SHADER,
Geometry = GL_GEOMETRY_SHADER,
Fragment = GL_FRAGMENT_SHADER
};
//...
然后,当我在另一个类中实现以下代码时……
std::unordered_map<Shader::Type, Shader> shaders;
…我得到一个编译错误。
...usr/lib/c++/v1/type_traits:770:38:
Implicit instantiation of undefined template 'std::__1::hash<Shader::Type>'
是什么导致了这里的错误?
原文由 Appleshell 发布,翻译遵循 CC BY-SA 4.0 许可协议
我使用仿函数对象来计算
enum class
的哈希值:现在您可以将其用作
std::unordered_map
的第三个模板参数:所以你不需要提供
std::hash
的特化,模板参数推导就可以了。 Furthermore, you can use the wordusing
and make your ownunordered_map
that usestd::hash
orEnumClassHash
depending on theKey
类型:现在您可以将
MyUnorderedMap
与enum class
或其他类型一起使用:理论上,
HashType
可以使用std::underlying_type
然后EnumClassHash
就没有必要了。这可能是这样的, 但我还没有尝试过:如果使用
std::underlying_type
有效,可能是该标准的一个很好的建议。