【发布时间】:2010-10-13 11:24:00
【问题描述】:
如何让 STL 实现选择我的自定义类型?在 MSVC 上,有一个类 std::tr1::hash,我可以通过使用来部分专门化它
namespace std
{
namespace tr1
{
template <>
struct hash<MyType>
{ ... };
}
}
但这是推荐的方式吗?此外,这也适用于 GCC 的实现吗?对于boost::hash,提供一个免费的函数size_t hash_value (const MyType&)就够了,TR1的实现有没有类似的东西?
【问题讨论】:
-
有没有办法使用私有复制构造函数为用户定义的类型扩展 std::hash?另外,有没有办法用一个接受 const ref 而不是 val 的 operator() 来扩展它?
-
模板专业化有什么问题?你不需要复制你的对象(你通过引用传递它),所以没问题 - 并且 operator() 需要一个 const ref 或值,无论你想要什么。查看 Phil Nash 的答案,它将对象作为 const ref。