如何实现迭代器类型的运算符>?

How to implement operator-> for iterator type?

本文关键字:运算符 gt 类型 迭代器 何实现 实现      更新时间:2023-10-16

有没有办法实现运算符>,而不仅仅是运算符*。要使以下代码正常工作:

Iterator<value> it = ...
i = (*it).get();
i = it->get(); // also works

假设值类型具有方法获取。当迭代器如下所示时:

template<T> class Iterator {
    T operator*() { return ... }
    T operator->()  { return ... }
 }

这里。。。是获取正确 T 对象的实现。

不知何故,当我以这种方式实现它时,它不起作用。我想我误解了什么。

operator->应该返回一个指针:

T * operator->();
T const * operator->() const;

如果要使用它进行修改,operator*应该返回一个引用:

T & operator*();
T operator*() const; // OR T const & operator*() const;

尽管这看起来很奇怪,但您希望返回指向 T 的指针,因此:

T * operator->() { return &the_value; }

或指向 const 的指针。

您没有指定"它不起作用"的含义 - 它是编译失败,还是执行了预期之外的其他操作?我会假设它可以编译,因为从你的片段中我看不出为什么它不应该编译。

您正在做的是按值返回。因此,您返回指向对象的新实例。相反,您应该在 operator-> 中返回指针,在 operator* 中返回引用