我正在實現一個迭代器,以便與我編寫的類一起使用。我想要的行爲與除構造函數外的std::vector::const_iterator
一樣,遞增和遞減,即迭代器是(不可變的,即不是OutputIterator
的示例)RandomAccessIterator
。在C++中創建迭代器時派生行爲的基類11
我真的不想定義迭代器上的所有操作,它們與它使用的std::vector::const_iterator
相同。我寧願從一個已經具有所有這些行爲的類派生出來,但由於std::vector::const_iterator
沒有虛擬析構函數,並且通過繼承派生將允許轉換回std::vector::const_iterator
,所以不適合僅僅讓我的迭代器從它繼承。
有定義(在理想情況下,標準庫)的模板需要RandomAccessIterator
作爲模板參數,並通過調用他們,是一個私有成員對所有一RandomAccessIterator
需要有操作提供虛成員函數傳遞給構造函數(即它通過構造而不是繼承從它的模板參數派生出所有的RandomAccessIterator
操作)?
爲了澄清,我希望能夠寫類似
template<class value_type>
class myIterator : public random_access_iterator<std::vector<value_type>::const_iterator>
{
myIterator(..., std::vector<value_type>::const_iterator base_iterator)
: random_access_iterator(base_iterator) { ... }
myIterator& operator++() derived;
myIterator& operator++ (int) derived;
myIterator& operator--() derived;
myIterator& operator-- (int) derived;
myIterator(const myIterator&) = default;
myIterator(myIterator&&) = default;
myIterator& operator=(const myIterator&) = default;
myIterator& operator=(myIterator&&) = default;
};
但是,還是,我不知道在這個例子中random_access_iterator
模板存在如果是這樣,它叫什麼。
也許像boost的'iterator_facade'? – zmb 2014-10-16 17:44:19
看看Boost [iterator_adaptor](http://www.boost.org/doc/libs/1_56_0/libs/iterator/doc/iterator_adaptor.html)。 – Casey 2014-10-16 18:33:18