有没有办法实现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对象的实现。
当我以这种方式实现它时,它将无法工作。我想我误解了一些事情。
答案 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*