我正在尝试实现循环迭代器,这在我的问题中非常有用。根据{{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=
等等。
有没有更方便的方法让这些东西有效?
答案 0 :(得分:1)
你有没有试过这样的事情:
template<class IteratorBase>
class cycle_iterator : public // (...)
{
// (...)
operator IteratorBase() {
return base_reference();
}
};