我想为自定义类型创建一个哈希,我已经看到我必须写一些类似的东西
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源代码,但我还不够好好理解它...
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)