我在一个类中定义了一个枚举类型,我想创建一个unordered_set作为该类的成员来存储这些对象:
#include <unordered_set>
class Foo {
public:
enum Bar {
SOME_VALUE
};
// Error: implicit instantiation of std::hash
std::unordered_set<Bar> getValues() const {
return _values;
}
private:
std::unordered_set<Bar> _values;
};
现在,我知道显而易见的答案是向unordered_set添加一个自定义哈希函数:
std::unordered_set<Bar, BarHasher>
然而,我想知道是否有一种方法可以专门为Bar枚举类型设置std::hash,以便任何使用unordered_map的人都可以自动获得哈希行为。
这对于每种其他数据类型都有效,但不适用于枚举类型 - 因为枚举类型无法进行前向声明。
为了使此方法起作用,我必须将std::hash的定义放在枚举定义之后,但在第一次使用之前,这意味着我必须将其放在类体的中间位置,但这是行不通的。