为什么哈希模板专用化需要result_type和argument_type



为什么C++11需要哈希模板专用化来定义result_typeargument_type?我发现了一些旧代码,其中用户定义的类型成功地用于unordered_map<>键,但没有这两个typedef

namespace std {
template<> struct hash<MyNamespace::Foo> {
typedef size_t result_type;
typedef MyNamespace::Foo argument_type;
size_t operator() (const MyNamespace::Foo& f ) const { return (size_t) f.u32InternalValue; }
};
}

这是指定函数对象特征的旧方法,与向无序容器提供哈希无关。

在C++11中,从一个表达式中合成它们仍然有点痛苦。通过C++17,这相对容易做到,而且它们是不推荐使用的成员,在C++20中,这一要求被取消了。

相关内容

最新更新