我目前正在嘗試理解各種語言中迭代器的內在性,即它們實現的方式。在C++中編寫我自己的stl-like迭代器實現
例如,有以下類暴露列表界面。
template<class T>
class List
{
public:
virtual void Insert(int beforeIndex, const T item) throw(ListException) =0 ;
virtual void Append(const T item) =0;
virtual T Get(int position) const throw(ListException) =0;
virtual int GetLength() const =0;
virtual void Remove(int position) throw(ListException) =0;
virtual ~List() =0 {};
};
根據四人幫,實現能夠支持不同類型的遍歷的迭代器的最佳方式是創建基本的迭代器類(列表的朋友)與可訪問列表的成員保護的方法。 Iterator的具體實現將以不同的方式處理作業,並通過基本接口訪問List的私有和受保護數據。
從這裏開始,事情變得混亂。說,我有類LinkedList和ArrayList,都從List派生,並且還有相應的迭代器,每個類都返回。我怎樣才能實現LinkedListIterator?我完全沒有想法。基類迭代器類可以從列表中檢索什麼樣的數據(這是一個純粹的接口,而所有派生類的實現差別很大)?
Boost迭代器庫是一個很好的信息來源,並且開發了新的迭代器類型/特性http://www.boost.org/doc/libs/1_42_0/libs/iterator/doc/index.html – Hippicoder 2010-04-16 22:26:32
這種氣味如Java/C#代碼。通常,好的C++看起來不像Java或C#。 – 2010-04-16 22:51:39
爲什麼你想從'List'派生,如果它是模板化的?如果刪除所有'虛擬'限定符並提供缺少的定義,則可以將其用於任何可想到的目的。 – wilhelmtell 2010-04-17 02:27:31