7
我原以爲會這樣,但是在我的標準庫實現(gcc-4.8.2)中找不到這個。爲什麼std :: hash不是專用於std :: reference_wrapper的?
爲什麼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());
}
};
}
也許是因爲如果你有一個引用包裝的容器,它是否應該散列引用或引用並不明顯,並提供一個標準的專業化將不得不選擇一個,並在這樣做混淆人。由於沒有提供,所以你不得不明確地表達你的意圖。 – Brian 2015-03-31 21:43:42
如果不是引用,你會對'reference_wrapper'進行散列嗎?它只有成員是'get()',它返回'T&'(和函數調用操作符相同)。它幾乎完全是爲了允許引用被存儲在標準容器中。 – 2015-03-31 23:24:01
指針,*即*,'std :: addressof(r.get())'。 – Brian 2015-03-31 23:37:12