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

时间:2016-01-31 11:08:47

标签: c++ c++11 hash

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

的内容
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源代码,但我还不够好好理解它......

1 个答案:

答案 0 :(得分:9)

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

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

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