Свяжите ссылки на подобъекты Base
и сравните их с обычным синтаксисом оператора.Пример:
class Base { /*...*/ };
bool operator==(const Base&, const Base&);
class Derive : public Base
{
friend bool operator==(const Derive&, const Derive&);
private:
int mem_;
};
bool operator==(const Derive& d1, const Derive& d2)
{
return static_cast<const Base&>(d1) == static_cast<const Base&>(d2)
&& d1.mem_ == d2.mem_;
}
Предупреждение: Такая настройка молча срезается, если вы случайно сравниваете Base
с Derive
.Если базовый класс должен быть сопоставим, возможно, стоит установить механизм виртуального сравнения.