Я думаю, что вы хотите что-то вроде двойной отправки / Шаблон посетителя, чтобы решить вашу проблему.
Информация о том, какой тип вашего изображения действительно находится под интерфейсом, доступна только внутри объекта. Поэтому вам нужно вызвать виртуальный метод для объекта изображения, чтобы получить базовый тип.
Пример:
class Image{
virtual void process(Processor &processor)=0;
}
class RightImage{
virtual void process(Processor &processor){
processor.process(this);
}
}
Конечно, вы также можете выполнять обработку внутри класса изображений в методе process () - Method, но я подозреваю, что вы хотите, чтобы разные типы процессоров работали с разными типами изображений.
Другой вариант, который, возможно, немного чище, заключается в том, чтобы процессор вызывал виртуальные методы для отдельных этапов обработки, где они различаются для типов изображений.