Я пытаюсь реализовать циклический итератор, что весьма полезно в моей задаче.В соответствии с этим потоком, я использую 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=
и т. Д.
Есть ли какой-нибудь более удобный способ заставить этот материал работать?