二重ディスパッチを使用して、別の (A) のサブクラスである2 つのクラス ( B
、 )の 2 つのオブジェクト間の距離を取得しています。のメソッドは純粋仮想であるべきだC
と思いますが、他の場所のテストで使用されるため、インスタンス化可能でなければならないので、純粋仮想にすることはできませんよね?class A
class A
Distance(A *a)
もう 1 つのことは、基本クラスの の定義で無限ループが発生する場合があるため、ダブル ディスパッチを適切に使用しているかどうかわからないことです。
にはclass A
、次のメソッドがあります。
virtual double Distance(A *a) {return a->Distance(this);}
virtual double DistanceB(B *b) {return std::numeric_limits<double>::max();}
virtual double DistanceB(C *c) {return std::numeric_limits<double>::max();}
virtual double DistanceC(B *b) {return std::numeric_limits<double>::max();}
virtual double DistanceC(C *c) {return std::numeric_limits<double>::max();}
でclass B
:
double B::Distance(A *a) { return a->DistanceB(this); }
double B::DistanceB(B *b) { /*calculate distance*/ }
double B::DistanceC(C *c) { return c->DistanceB(this); }
でclass C
:
double C::Distance(A *a) { return a->DistanceC(this); }
double C::DistanceB(B *b) { /*calculate distance*/ }
double C::DistanceC(C *c) { /*calculate distance*/ }