在类定义之外重载运算符

时间:2013-11-11 19:32:59

标签: c++

我想重载operator-以给出作为参数传递的两个迭代器之间的距离。

我的类是一个列表,我的迭代器类嵌套在我的列表中。

我似乎无法获得正确的功能形式。我没有机会测试身体。我对函数的主要问题是我如何定义它。

size_t operator-(template <class T> typename mylist<T>::iterator a, template <class T> typename mylist<T>::iterator b) {
    size_t i = 0;
    while(a.node != b.node) {
        ++a;
        ++i;
    }
    return i;
}

3 个答案:

答案 0 :(得分:2)

正确的定义应该是这样的:

template <class T>
size_t operator-(const mylist<T>::iterator& a, const mylist<T>::iterator& b) {
   ... put logic here... 
}

operator-不应该修改它的参数,而你的参数通常不是很好。你可以通过传递参数的副本来解决这个问题:

template <class T>
size_t operator-(mylist<T>::iterator a, mylist<T>::iterator b) {
   ... put logic here... 
}

答案 1 :(得分:1)

您应该了解如何正确template a function

template<class T>
void function(const T& t) { ... }

答案 2 :(得分:0)

template <class T>
size_t operator-(typename mylist<T>::iterator a, typename mylist<T>::iterator b) 
{
    size_t i = 0;
    while(a.node != b.node) {
        ++a;
        ++i;
    }
    return i;
}

template <class Iterator>
size_t operator-(Iterator & a, const Iterator & b) 
{
    size_t i = 0;
    while(a.node != b.node) {
        ++a;
        ++i;
    }
    return i;
}

注意迭代器上的引用和const不会改变(如果你不希望它改变,你可能不希望通过引用传递它。)