Как правильно использовать boost :: iterator_adaptor для создания циклического итератора? - PullRequest
2 голосов
/ 10 февраля 2012

Я пытаюсь реализовать циклический итератор, что весьма полезно в моей задаче.В соответствии с этим потоком, я использую boost::iterator_adaptor для этой цели, и сам итератор работает нормально.Реализация очень похожа на этот ответ .

Однако, есть проблема при работе как 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= и т. Д.

Есть ли какой-нибудь более удобный способ заставить этот материал работать?

1 Ответ

1 голос
/ 11 марта 2012

Вы пытались сделать что-то вроде этого:

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