如何实现operator-> for iterator类型?

kok*_*ing 14 c++ iterator operator-overloading

有没有办法实现operator->,而不仅仅是operator*.要使以下代码有效:

Iterator<value> it = ...
i = (*it).get();
i = it->get(); // also works
Run Code Online (Sandbox Code Playgroud)

我们说值类型有方法get.当Iterator实现如下:

template<T> class Iterator {
    T operator*() { return ... }
    T operator->()  { return ... }
 }
Run Code Online (Sandbox Code Playgroud)

这里......是获得正确T对象的实现.

不知何故,当我以这种方式实现它时,它将无法工作.我想我误解了一些事情.

Mik*_*our 19

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

T * operator->();
T const * operator->() const;
Run Code Online (Sandbox Code Playgroud)

operator* 如果要将其用于修改,则应返回引用:

T & operator*();
T operator*() const; // OR T const & operator*() const;
Run Code Online (Sandbox Code Playgroud)


Ben*_*ley 5

看起来很奇怪,因此您想要返回一个指向T的指针:

T * operator->() { return &the_value; }
Run Code Online (Sandbox Code Playgroud)

或指向const的指针。