は、私はクラスの内部で定義された列挙型を持っている、と私はクラスのメンバーとしてそれらのオブジェクトのunordered_setを作成したい:今すぐクラス内で定義されたenumのstd :: hashをオーバーライドする方法は?
#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にカスタムハッシュ関数は:unordered_mapを使用するすべてのユーザーが自動的にハッシュの挙動を取得するようにバーの列挙型のためのstd ::ハッシュを専門とする方法があるかどう
std::unordered_set<Bar, BarHasher>
しかし、私が思ったんだけどすることです。
これは、他のすべてのデータ型で動作しますが、列挙型ではありません。列挙型を宣言して転送することはできません。
これを行うには、std :: hashの定義をenum定義の後に置かなければならないが、最初の使用の前には、クラスの真ん中に置く必要がある体、それは動作しません。
列挙型を宣言することはできますが、どのように役立つかはわかりません。 – chris
これはC++ 14で修正されています:http://stackoverflow.com/a/29618545/951890 –