![](/img/trans.png)
[英]How to implement operator-> for an iterator that constructs its values on-demand?
[英]How to implement operator-> for iterator type?
有沒有一種方法可以實現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對象的一種實現。
當我以這種方式實現它時,它將以某種方式不起作用。 我想我誤會了。
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*
引用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.