我正在尝试实现循环迭代器,这在我的问题中非常有用。根据this线程,我为此使用boost::iterator_adaptor
,并且迭代器本身工作正常。实现非常类似于this answer。
但是,在同一句子中同时操作cycle_iterator
和“native” 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'的左侧操作数(或没有可接受的转换)。
我可以解决它,在
operator!=
中为cyclic_iterator
明确指定IteratorBase
。但是,我需要显式重载operator==
,operator=
等。有没有更方便的方法可以使这些东西正常工作?
最佳答案
您是否尝试过执行以下操作:
template<class IteratorBase>
class cycle_iterator : public // (...)
{
// (...)
operator IteratorBase() {
return base_reference();
}
};
关于c++ - 如何正确使用boost::iterator_adaptor制作循环迭代器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9229265/