2012-07-09 52 views
4

假設我有這樣的事情:如何使迭代器「自動解除引用」?

class Collection 
{ 
private: 
    typedef std::vector< std::shared_ptr<Something> >::iterator Iterator; 
    std::vector< std::shared_ptr<Something> > data_; 

public: 
    Iterator begin() {return data_.begin()} 
    Iterator end() {return data_.end()} 
} 

當我使用一個Collection::Iterator比如我要提領一次,以獲得std::shared_ptr<Something>對象,並再次獲得Something對象。

但是,如果我想使std::shared_ptr<Something>只是一個實現細節,在一個解引用後,我應該得到一個Something對象是合理的。

即:

Collection collection; 
Collection::Iterator it = collection.begin(); 
Something firstMember = *it; // instead of the current **it; 

我的問題是,我需要做的Iterator是一個從無到有的嵌套類的Collection從這裏http://www.cplusplus.com/reference/std/iterator/或者實現所有隨機訪問迭代器所需要的功能是存在的一些衆所周知的方法?可能C++ 11?

回答

10

這聽起來像你正在實施,並且被稱爲boost::ptr_vector。 Boost還提供了a library用於實現迭代器,但痛苦較輕。這聽起來像你正在尋找的是boost::indirect_iterator

+0

boost :: indirect_iterator完全是我在找的!謝謝! – 2012-07-09 04:28:46