是否有可能使用boost迭代器外觀實現任何迭代器? 我不希望在我的基類來定義實施細則AnyIterator和boost迭代器外觀
class Base
{
public:
typedef std::vector<int>::iterator iterator;//implementation detail
...
virtual iterator begin()=0;
virtual iterator end()=0;
};
還是我必須從頭開始完全寫一個;
是否有可能使用boost迭代器外觀實現任何迭代器? 我不希望在我的基類來定義實施細則AnyIterator和boost迭代器外觀
class Base
{
public:
typedef std::vector<int>::iterator iterator;//implementation detail
...
virtual iterator begin()=0;
virtual iterator end()=0;
};
還是我必須從頭開始完全寫一個;
您發佈的代碼已修復從Base
返回的迭代器類型及其所有實現代碼爲std::vector<int>::iterator
,這可能不是您想要的。耶利米的建議是去與一個缺點的一種方式:你有STL寬鬆的兼容性......我知道的多態迭代器包裝的三種實現的:
any_iterator
(實現boost::iterator_facade
)opaque_iterator
庫(谷歌爲它),或any_iterator
s STL層次結構。的問題是難度比它看起來......我做了一個嘗試自己主要是因爲我需要協方差any_iterators
類型參數(any_iterator<Derived>
應該是自動轉換爲any_iterator<Base>
),這是很難與像迭代器STL簡潔地實現。像Enumerator<T>
這樣的C#更容易實現(*)(並且imho通常比STL類似的迭代器對更清潔),但是再次,您「鬆開」了STL。
(*)=當然沒有 '產量' :-)
我想這可能是你在找什麼:
下面是一個片段該頁::
概述
類模板any_iterator是對迭代器 迭代器的boost :: function的模擬。它允許你有一個變量,併爲其分配不同類型的迭代器,只要這些迭代器具有合適的通用性。
的方式,我可能會做它是定義像`迭代器`這就像一個Java或C#迭代器的抽象基類,模板化的實現,對於任意的迭代器,然後用Boost.Iterator包一個迭代器接口在任何`Iterator `之上。你想讓我試圖勾畫僞代碼嗎? –
2011-02-22 17:13:23