模板的非成员比较运算符 class
Non member comparison operator for a template class
我定义了一个模板容器 Tree<T>
,有两个成员-class 迭代器:const_iterator
和 iterator
现在我要添加非成员比较运算符:
template<typename T>
bool operator==(Tree<T>::const_iterator a, Tree<T>::iterator b)
{
return a.ptr() == b.ptr();
}
但是我有编译错误:
declaration of 'operator==' as non-function
为什么?这是模板的原因吗?
此处的dependent name需要使用typename
,例如
template<typename T>
bool operator==(typename Tree<T>::const_iterator a, typename Tree<T>::iterator b)
// ~~~~~~~~ ~~~~~~~~
{
return a.ptr() == b.ptr();
}
我定义了一个模板容器 Tree<T>
,有两个成员-class 迭代器:const_iterator
和 iterator
现在我要添加非成员比较运算符:
template<typename T>
bool operator==(Tree<T>::const_iterator a, Tree<T>::iterator b)
{
return a.ptr() == b.ptr();
}
但是我有编译错误:
declaration of 'operator==' as non-function
为什么?这是模板的原因吗?
此处的dependent name需要使用typename
,例如
template<typename T>
bool operator==(typename Tree<T>::const_iterator a, typename Tree<T>::iterator b)
// ~~~~~~~~ ~~~~~~~~
{
return a.ptr() == b.ptr();
}