У меня возник вопрос о реализации совместного интерфейса итератора.Оператор постфиксного абстрактного базового класса C++
Как обычная практика для оператора postix функция может выглядеть следующим образом:
IteratorClass operator ++(int) {
IteratorClass temp = *this;
//increment stuff
return temp
}
И большую часть времени, это прекрасно. В моем случае я пытаюсь реализовать 3 итератора для одного класса. Каждый итератор будет загружать локальный класс коллекции данными, но каждый производный итератор будет загружать его по-другому. Поскольку класс коллекции будет таким же, и весь код для операторов (постфикса/префикс ++/- *) будет такой же, я думал, что хороший способ осуществить это было бы наследование:
struct iterator {
protected:
Collection collection;
public:
operator++(int);
operator++;
operator--(int);
operator--;
virtual load() = 0;
}
struct iterator1 : public iterator {
virtual load() { custom load function }
}
struct iterator2 : public iterator {
virtual load() { custom load function }
}
Проблема - это постфиксные операторы ... Они пытаются создать объект абстрактного типа и затем возвращать его. Любые предложения об обходных решениях или изменениях структуры?
Вам действительно нужно иметь постфиксный оператор, как правило, это плохая идея использовать их для итераторов. – Phil1970