1

我有一堂课

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

以及一些继承自 的类Base覆盖GetHash().

我想将这些类用作unordered_mapor中的键unordered_set。目前我通过使用实现它

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

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

根据这个问题,我可以明确地专门std::hash<T>针对我自己的课程并且完全可以正常工作,但是我是否有兴趣将它专门用于多个课程?

我正在使用 C++17

4

1 回答 1

-1

是的。使其适用于所有 T ,其中 T的基类Base。如果没有requires,则使用 SFINAE 和enable_if.

于 2021-09-10T13:45:22.150 回答