为什么我们需要std :: hash <sometype>()(somevalue)中的additional()?

Jep*_*sen 0 c++ hash c++11

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

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

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

std::hash<int>()(key.getID());
Run Code Online (Sandbox Code Playgroud)

代替

std::hash<int>(key.getID());
Run Code Online (Sandbox Code Playgroud)

中间()运营商的意义是什么?我正在使用Visual Studio 2013,我试图查看std::hash源代码,但我还不够好好理解它...

jua*_*nza 9

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

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

std::hash<int> x;
auto h = x(key.getID());
Run Code Online (Sandbox Code Playgroud)