模板类的非成员比较运算符

时间:2017-02-10 10:52:07

标签: c++ templates operator-keyword non-member-functions

我已经定义了一个模板容器Tree<T>,它有两个成员类迭代器:const_iteratoriterator

现在我想添加非成员比较运算符:

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

为什么呢?这是由于模板吗?

1 个答案:

答案 0 :(得分:4)

您需要在dependent name使用typename,例如

template<typename T>
bool operator==(typename Tree<T>::const_iterator a, typename Tree<T>::iterator b)
//              ~~~~~~~~                            ~~~~~~~~
{
    return a.ptr() == b.ptr();
}