2012-02-10 149 views
2

我想实现循环迭代器,这在我的问题中非常有用。根据this线程,我使用boost::iterator_adaptor来达到这个目的,并且迭代器本身工作正常。实现与this answer非常相似。如何正确使用boost :: iterator_adaptor来制作循环迭代器?

但是,操作时有一些问题,既cycle_iterator并在同一个句子“本土” IteratorBase,像这样:

vector<int> v; 
vector<int>::iterator it = v.begin(); 
cyclic_iterator<vector<int>::iterator> cit(v.begin(), v.end()); 

if (cit != it) // Don't compile 
{ 
    ... 
} 

编译器生成错误C2678:二进制“=!”:没有操作员发现这需要类型'cyclic_iterator'的左侧操作数(或者没有可接受的转换)。

我可以在cyclic_iteratorIteratorBase中明确指定operator!=来解决它。但是,我需要明确地重载operator==operator=等等。

有没有一些更方便的方法来使这个东西工作?

回答

1

您是否尝试过做这样的事情:

template<class IteratorBase> 
class cycle_iterator : public // (...) 
{ 
    // (...) 
    operator IteratorBase() { 
     return base_reference(); 
    } 
}; 
+0

它只能处理的情况下'它V cit',其中V是一些比较运算,而不是分配,甚至'CIT V it'情况。 – Mikhail 2012-03-11 20:28:48

+0

好了,毕竟,我决定将这个转换运算符与赋值运算符一起添加,而不是将'cyclic_itertor'与原始迭代器进行比较,因为它可能容易出错。所以我会接受你的回答:) – Mikhail 2012-03-15 16:48:30

+0

@Mikhail:谢谢:-) – 2012-03-17 11:26:18