Ho un tipo di enumerazione definita all'interno di una classe, e voglio creare un unordered_set di questi oggetti come membro della classe:Come sovrascrivere std :: hash per un enum definito all'interno di una classe?
#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;
};
Ora, so che la risposta ovvia è quella di aggiungere un funzione di hash personalizzata al unordered_set:
std::unordered_set<Bar, BarHasher>
Tuttavia, quello che mi chiedo è se c'è un modo per specializzarsi std :: hash per l'enumerazione barra in modo che chi utilizza unordered_map ottiene automaticamente il comportamento di hashing.
Questo funziona con ogni altro tipo di dati, ma non enumerazioni - perché le enumerazioni non possono essere inoltrate dichiarate.
Per far funzionare tutto questo, dovrei mettere la definizione di std :: hash dopo la definizione enum, ma prima del primo utilizzo, il che significa che dovrei metterlo nel mezzo della classe corpo, che non funzionerà.
Le enumerazioni possono essere inoltrate, ma non vedo come possa essere utile. – chris
Questo problema è stato risolto in C++ 14: http://stackoverflow.com/a/29618545/951890 –