- Реализуйте оператор == как автономную функцию.
- Пусть он вызовет виртуальный метод для одного из аргументов (например, IsEqual ())
Это даетВы к точке, где у вас есть
Derived1::IsEqual(const Base& base)
Called.Отсюда у вас есть несколько вариантов
- Использовать RTTI для dynamic_cast <> base для Derived1
Если число производных мало и конечно, вы можете реализовать
virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
как виртуальные методы.В Derived1 вы переопределяете и сравниваете по-настоящему.