给定一个嵌套的模板类结构,如下所示:
template<class T> class A
{
...
public:
...
class B;
};
我希望std :: hash函数能够处理嵌套类,以便可以将它放在unsorted_map和unsorted_set之类的内容中,所以我将嵌套类定义为:
template<class T> class A<T>::B
{
public:
bool operator==(const A<T>::B &) const;
...
friend struct std::hash<A<T>::B>;
};
然后尝试为此类型添加专门的std :: hash结构,如下所示:
namespace std
{
template<class T> struct hash<A<T>::B>
{
bool operator()(const A<T>::B &x) const
{
...
}
};
}
但是当我尝试像这样定义自定义std :: hash函数对象时,编译器会激动地抱怨。
我收到的错误消息无益,如下所示:
xyz.cc:17:38: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Tp> struct std::hash'
template<class T> struct hash<A<T>::B>
^
xyz.cc:17:38: error: expected a type, got 'A<T>::B'
然而,我不确定我应该怎么表达它。
为什么这是错的,我该怎么做才能解决它?
答案 0 :(得分:1)
你不能。
依赖类型不能与模式匹配,因为一般情况下需要反转任意图灵完备算法。
最简单的方法是将B
设为独立模板,然后将typedef设置为A
。