C++ 在tr1中为模板类定义哈希

C++ 在tr1中为模板类定义哈希,c++,C++,我有班级网关。 我需要将这个类的对象存储在一个哈希表中(使用tr1::unordered_set)。 我在另一个上下文中使用了无序集和类网关,它们工作得很好,但是我不知道如何将网关放在无序集中,因为我无法在tr1的命名空间中定义它的hash函数 我试过:(和许多其他变体) 有人能解释一下这个问题吗 更新 谢谢你的回答,但是仍然有一个问题,编译器说不完整类型的使用无效struct std::tr1::hash 当我们在没有完整定义的情况下使用类,而在声明之前完全定义了类时,就会发生这种错误。我已经

我有班级网关。 我需要将这个类的对象存储在一个哈希表中(使用tr1::unordered_set)。 我在另一个上下文中使用了无序集和类网关,它们工作得很好,但是我不知道如何将网关放在无序集中,因为我无法在tr1的命名空间中定义它的
hash
函数

我试过:(和许多其他变体)

有人能解释一下这个问题吗

更新

谢谢你的回答,但是仍然有一个问题,编译器说不完整类型的使用无效
struct std::tr1::hash

当我们在没有完整定义的情况下使用类,而在声明之前完全定义了类时,就会发生这种错误。我已经以一种非常相似的方式使用了这个没有模板的方法,没有任何问题

template <typename T> 
inline size_t hash<(typename Gateway<T>)>::operator()(Gateway<T> gT) const 
注意,为了避免复制,我还设置了参数
constgateway&
type


另外请注意,名称空间
tr1
不是嵌套的名称空间。

hash()
字符之间需要一个空格。c++0x修复了这个问题,我也遇到了类似的问题,下面的例子是saved me;)
namespace std {
    namespace tr1 {
        template<> inline size_t hash<Board>::operator()(Board b) const {
            return b.hash();            //!WORKS FINE
        }
    }
}
template <typename T> 
inline size_t hash<(typename Gateway<T>)>::operator()(Gateway<T> gT) const 
namespace tr1
{
    template <typename T> 
    inline size_t hash<Gateway<T> >::operator()(const Gateway<T> & gT) const 
    {
          return gT.getCore()->hash();          
    }
}