0

我想重载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;
}
4

3 回答 3

2

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

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

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

template <class T>
size_t operator-(mylist<T>::iterator a, mylist<T>::iterator b) {
   ... put logic here... 
}
于 2013-11-11T19:35:10.803 回答
1

您应该研究如何正确模板化函数

template<class T>
void function(const T& t) { ... }
于 2013-11-11T19:35:34.070 回答
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;
}

注意迭代器上不变的引用和常量(如果你不想改变它,你可能不想通过引用传递。)

于 2013-11-11T19:35:40.910 回答