Проблема с кодом заключается в том, что любой объект, который соответствует одному из методов процесса (Operation *), также будет соответствовать методу process (Operation). Поскольку есть два метода, которые можно использовать, компилятор предупреждает вас о неоднозначной ситуации.
Если вы действительно хотите / нуждаетесь в приведенном выше коде, я бы предложил реализовать методы process (Operation *) и изменить метод process (Operation) так, чтобы он назывался processCommon. (Операция). Затем первое, что делает каждый процесс (Operation *), это вызывает processCommon.
Кроме того, вы можете кодировать в точности так, как сказал Ави, используя экземпляр сравнения.
Ни один из них не идеален, но он достигнет того, что вы хотите.