我有一个class
class Base {
...
virtual size_t GetHash() = 0;
...
};
和一些继承自Base
的类,它们覆盖了GetHash()
。
我想在unordered_map
或unordered_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
完成。