如何正确使用boost :: iterator_adaptor来制作循环迭代器?

时间:2012-02-10 14:24:04

标签: c++ boost stl iterator

我正在尝试实现循环迭代器,这在我的问题中非常有用。根据{{​​3}}线程,我正在使用boost::iterator_adaptor来实现此目的,并且迭代器本身也能正常工作。实施与this非常相似。

但是,在同一句话中同时操作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:binary'!=':找不到运算符,该运算符采用'cyclic_iterator'类型的左手操作数(或者没有可接受的转换)。

我可以解决此问题,operator!=cyclic_iterator明确指定IteratorBase。但是,我需要明确地重载operator==operator=等等。

有没有更方便的方法让这些东西有效?

1 个答案:

答案 0 :(得分:1)

你有没有试过这样的事情:

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