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

时间:2010-07-28 12:23:31

标签: c++ operator-overloading double-dispatch

如何实施

operator==(const Base& base)

比较子类s.t.调用

时将正确调度调用
Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?

2 个答案:

答案 0 :(得分:6)

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

    这可以让你达到

    的程度
    Derived1::IsEqual(const Base& base)
    

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

    1. 将RTTI用于dynamic_cast<>基于Derived1
    2. 如果派生的数量很少且有限,则可以实现

      virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
      virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
      
    3. 作为虚拟方法。在Derived1中,您可以覆盖并比较实数。

答案 1 :(得分:1)

这似乎是关于类和类型的通用C ++问题,而不是关于operator ==的特定问题。据我所知,在您提供的特定示例中,除了使用dynamic_cast

之外别无他法