【问题标题】:How to implement operator-> for iterator type?如何为迭代器类型实现 operator->?
【发布时间】:2012-02-18 22:27:40
【问题描述】:

有没有办法实现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 对象的实现。

当我以这种方式实现它时,它会以某种方式不起作用。我想我误会了什么。

【问题讨论】:

标签: c++ iterator operator-overloading


【解决方案1】:

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

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

或指向 const 的指针。

【讨论】:

    【解决方案2】:

    operator-&gt; 应该返回一个指针:

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

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

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

    【讨论】:

      【解决方案3】:

      您没有具体说明“它不起作用”是什么意思——它是编译失败,还是做了超出预期的事情?我会假设它可以编译,因为从你的 sn-p 我看不出它为什么不应该编译。

      你正在做的是返回。因此,您返回指向对象的新实例。相反,您应该在operator-&gt; 中返回一个指针并在operator* 中引用

      【讨论】:

      • 它不会编译,但我不记得正确的错误信息。
      猜你喜欢
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多