簡體   English   中英

如何實現operator->的迭代器類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM