我原以为这已经被实现了,但是在我的标准库实现(gcc-4.8.2)中找不到。
为什么std::hash
没有专门为std::reference_wrapper
进行特化?
#pragma once
#include <functional>
namespace std
{
template<typename T>
struct hash<reference_wrapper<T>>
{
size_t operator()(const reference_wrapper<T>& r) const
{
return std::hash<T>()(r.get());
}
};
}
reference_wrapper
哈希到哪里?它唯一的成员是get()
,它返回一个T&
(以及执行相同操作的函数调用运算符)。它几乎完全存在于允许在标准容器中存储引用的情况下。 - Steve Lorimerstd::addressof(r.get())
。 - Brian Bi