如何实现operator->对于迭代器类型?

时间:2012-01-25 18:06:33

标签: c++ iterator operator-overloading

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:18)

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

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

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

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

答案 1 :(得分:4)

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

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

或指向const。

的指针

答案 2 :(得分:2)

您没有指定“它不起作用”的含义 - 它是否无法编译,或者做了除预期之外的其他事情?我会假设它编译,因为从你的片段我不明白为什么它不应该。

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

中引用