多个std::哈希特化



我有一个class

class Base {
...
virtual size_t GetHash() = 0;
...
};

和一些继承自Base的类,它们覆盖了GetHash()

我想在unordered_mapunordered_set中使用这些类作为键。目前我通过使用

来实现它
struct HashKey
{
template <typename T>
size_t operator()(const T & obj) const
{
return obj.GetHash();
}
};

作为unordered_map模板中的Hash类(如unordered_map<MyDerived, int, Hashkey>)。

根据这个问题,我可以显式专门化std::hash<T>为我自己的类,完全工作得很好,但我感兴趣的是,如果有任何方法专门化它为多个类?

我正在使用c++ 17

是。使它适用于所有T,其中T有一个基类Base。如果没有requires,则使用SFINAE和enable_if完成。

最新更新