我想重载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;
}
答案 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不会改变(如果你不希望它改变,你可能不希望通过引用传递它。)