Постфиксный оператор абстрактного базового класса c ++
У меня есть вопрос о реализации общего интерфейса итератора.
В качестве обычной практики для оператора postix функция может выглядеть следующим образом:
IteratorClass operator ++(int) {
IteratorClass temp = *this;
//increment stuff
return temp
}
И в большинстве случаев это нормально. В моем случае я пытаюсь реализовать 3 итератора для одного класса. Каждый итератор будет загружать класс локальной коллекции с данными, но каждый производный итератор будет загружать его по-своему. Поскольку класс коллекции был бы одинаковым и весь код для операторов (postfix / prefix ++ / -, *) был бы одинаковым, я подумал, что хорошим способом реализовать это было бы наследование:
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 }
}
Проблема в постфиксных операторах ... Они пытаются создать объект абстрактного типа, а затем возвращают его. Любые предложения для обходных путей или структурных изменений?