如何解决为什么哈希模板专门化需要result_type和arguments_type?
为什么C ++ 11要求哈希模板专门化来定义result_type
和argument_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; }
};
}
解决方法
这是指定函数对象特征的旧方法,与将Hash提供给无序容器无关。
在C ++ 11中,从表达式中合成它们仍然有些痛苦。通过C ++ 17,它相对容易实现,并且它们已被弃用,并且在C ++ 20中,这一要求得以解除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。