У меня есть тип перечисления, определенный внутри класса, и я хочу создать 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>
Однако мне интересно, есть ли способ специализировать std:: hash для перечисления Bar, чтобы каждый, кто использует unordered_map, автоматически получает поведение хэширования.
Это работает с любым другим типом данных, но не перечисляет - потому что перечисления не могут быть объявлены вперед.
Чтобы это сработало, мне пришлось бы поместить определение std:: hash после определения перечисления, но до первого использования, что означает, что мне пришлось бы поставить его в середине тела класса, который не будет работать.