で使用する構造体を準備するにはunordered_set
、ハッシュ関数が必要です。これは、オーバーロードoperator size_t()
(ew)するか、迷惑なことに次のようなものを作成することで実現できます。
namespace std
{
template<> struct hash<MyStruct> : public unary_function<MyStruct, size_t>
{
size_t operator()(const MyStruct& mystruct) const
{
return 0; //hash here
}
};
}
次のようなインターフェイスを作成する方法はありますか?
struct Hashable
{
virtual size_t hash() = 0;
};
そしてstd::hash
、その実装のいずれかで機能するように設定しますか?テンプレートがそのように機能しないことはかなり確信しているので、それは私を束縛に任せました。size_tにキャストするための安全なboolイディオムのように機能する安全なsize_tイディオムはありますか?または、他の何か?std::hash
共通のインターフェースと各構造体のメンバー関数がはるかに便利な場合、すべての構造体に新しい特殊化を書き出すのはばかげています。