没有模板的操作符重载

Operator Overloading without templates

本文关键字:操作符 重载      更新时间:2023-10-16

作为一个c++新手,我对重载的经验仅限于复制、移动赋值操作符以及I/O流操作符。

我现在必须为解析树节点类创建一个迭代器,这意味着我必须重载以下内容:
  1. = =
  2. *(废弃操作符)
  3. + +
  4. ,
  5. > =

我一直在网上搜索以及一些c++书籍,但到目前为止我没有适合我的特殊情况(即没有参考模板),但是我已经了解到自增和自减运算符需要为后缀和前缀大小写重载"两次"

谁能解释一下怎么做,以及背后的原因

谢谢你:)

如果我离题了,我道歉。

您可能想看看Boost中的 boost::iterator_facade 。迭代器图书馆。

这将允许您定义成员函数equal(), derefence(), increment(), decrement(), advance()distance()。从这些成员中,库将为您生成==!=*++--+=-=[]以及关系操作符<><=>=

你也可以手工定义它,但是正如你注意到的,有很多代码重复(相等和不相等,前递增和后递增)。此外,迭代器还需要访问特定的类型和仔细定义的返回类型,以及临时变量的生命周期管理,以便与标准库配合良好。的提振。迭代器将以一种直接的方式为您处理所有这些细节。

有一个链表迭代器的工作示例,您可以尝试将其改编为树迭代器。

注意:没有必要自己定义模板,但是迭代器外观本身就是一个模板,然后您可以使用树类的特定类型实例化它。