Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

operator== with double dispatch in C++

How should one implement

operator==(const Base& base)

to compare subclasses s.t. the calls would be properly dispatched when called as

Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
like image 346
MAG Avatar asked Feb 03 '26 04:02

MAG


1 Answers

  1. Implement operator== as a free standing function.
  2. Have it call a virtual method on one of the arguments (e.g. IsEqual())

That gets you to the point where you have

Derived1::IsEqual(const Base& base)

Called. From here you have some options

  1. Use RTTI to dynamic_cast<> base to Derived1
  2. If the number of derived is small and finite, you can implement

    virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
    virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
    

as virtual methods. In Derived1, you override and compare for real.

like image 105
Lou Franco Avatar answered Feb 05 '26 22:02

Lou Franco