[英]C++ std::tr1::hash for a templated class
我有这个模板类:
template <typename T> Thing { ... };
我想在unordered_set中使用它:
template <typename T> class Bozo {
typedef unordered_set<Thing<T> > things_type;
things_type things;
...
};
现在,除了哈希函数之外,类Thing具有所需的一切。 我想使这个通用所以我尝试类似的东西:
namespace std { namespace tr1 {
template <typename T> size_t hash<Thing<T> >::operator()(const Thing<T> &t) const { ... }
}}
尝试用g ++ 4.7编译它会让它尖叫
在'<'之前预期的初始化程序
有关
hash<Thing<T> >
声明的一部分。 任何线索都有助于挽救我头上剩下的少量毛发。
你不能只为hash::operator()(const T&)
提供专门化; 只是专门化整个struct hash
。
template<typename T>
struct Thing {};
namespace std { namespace tr1 {
template<typename T>
struct hash<Thing<T>>
{
size_t operator()( Thing<T> const& )
{
return 42;
}
};
}}
另一种方法是为Thing
创建一个hasher,并将其指定为unordered_set
的第二个模板参数。
template<typename T>
struct Thing_hasher
{
size_t operator()( Thing<T>& const )
{
return 42;
}
};
typedef std::unordered_set<Thing<T>, Thing_hasher<T>> things_type;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.