我正在尝试实现循环迭代器,这在我的问题中非常有用。根据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/

10-10 21:38