为什么我们需要在 std::hash<sometype>()(somevalue) 中附加 ()?

Why we need additional () in std::hash<sometype>()(somevalue)?

本文关键字:somevalue gt lt 我们 std 为什么 hash sometype      更新时间:2023-10-16

我想为自定义类型创建一个哈希,我已经看到我必须写类似的东西

template <>
struct hash<MyClass>
{
  std::size_t operator()(const MyClass& key) const
  {
    return std::hash<int>()(key.getID());
  }
};

代码有效,但我不明白为什么我必须写

std::hash<int>()(key.getID());

而不是

std::hash<int>(key.getID());

中间()运算符的含义是什么?我正在使用Visual Studio 2013,并且我试图查看std::hash源代码,但是我不够好,无法很好地理解它...

std::hash<int>是一种类型。 std::hash<int>()是该类型的对象。 std::hash<int>()(key.getID());调用该对象上的operator()

如果对象不是临时的,则可能更容易理解:

std::hash<int> x;
auto h = x(key.getID());