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)
这让你达到了你的目标
Derived1::IsEqual(const Base& base)
Run Code Online (Sandbox Code Playgroud)
调用.从这里你有一些选择
如果派生的数量很小且有限,则可以实现
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中,您覆盖并比较真实.