我使用雙派遣來獲得另一個(A)的子類的2個對象之間的距離(B
,C
)。 我認爲class A
中的方法應該是純虛擬的,但是它們被用在其他地方的測試中,所以class A
必須是可實例化的,所以我不能讓它們變成純虛擬的,對吧?雙派遣無限循環
另一件事是我不確定我是否以一種好的方式使用雙重調度,因爲有時會在基類的Distance(A *a)
的定義中生成一個無限循環。
在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*/ }
草莓和在頂部的櫻桃,格式代碼,代碼拜託。 – Angew
如果你描述什麼會觸發無限循環(顯示你正在調用哪種方法,以及如何使用哪個參數),它將幫助人們。 – TypeIA
'double A :: Distance(A * a){return a-> Distance(this);}'看起來很可疑。 – laune