operator ==在C++中使用双重调度

MAG*_*MAG 3 c++ operator-overloading double-dispatch

应该如何实施

operator==(const Base& base)
Run Code Online (Sandbox Code Playgroud)

比较子类,调用时调用将被正确调度

Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
Run Code Online (Sandbox Code Playgroud)

Lou*_*nco 6

  1. 将operator ==实现为独立功能.
  2. 让它在其中一个参数上调用虚方法(例如IsEqual())

这让你达到了你的目标

Derived1::IsEqual(const Base& base)
Run Code Online (Sandbox Code Playgroud)

调用.从这里你有一些选择

  1. 使用RTTI将dynamic_cast <> base添加到Derived1
  2. 如果派生的数量很小且有限,则可以实现

    virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
    virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
    
    Run Code Online (Sandbox Code Playgroud)

作为虚拟方法.在Derived1中,您覆盖并比较真实.