重载类定义之外的运算符
Overloading operators outside of class definition
我想重载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;
}
正确的定义应该是这样的:
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...
}
您应该研究如何正确模板化函数。
template<class T>
void function(const T& t) { ... }
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;
}
请注意迭代器上不会更改的引用和常量(如果不希望它更改,则可能不希望传递 BY 引用。
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 如何正确实现和访问运算符的各种自定义枚举器
- 自定义先决条件对移动分配运算符有效吗
- 在运算符重载定义中使用成员函数(const错误)
- g++用户定义的动态链接库上的全局new和delete运算符
- 一元"运算符"未在C++中定义
- STL按客户"<"运算符对向量进行排序。为什么要将"<"运算符定义为 const?
- 如何将运算符定义从头文件添加到现有结构?
- 在使用具有相等运算符定义的抽象类时,如何定义父类以减少代码重复?
- 当我们没有将运算符+定义为朋友时?C++
- 没有返回值的c++类成员运算符定义
- 用指向对象的指针和c++中的new运算符定义对象
- <T> 仅为具有运算符/定义的此类 T 创建模板
- 基类中的运算符定义
- C++:不同名称空间中的多个运算符定义
- 运算符定义不能正常工作
- 类运算符'='定义
- 为什么VS不为逻辑运算符定义可选的令牌?
- std::equal_range 不适用于具有运算符<定义的结构