假設我有兩種不同類型的對撞機,圓形和方框,它們派生自相同的基本對撞機類。我有一個實體類,其中包含一個指向對撞機的指針,該對象可以是圓形對撞機或箱式對撞機。處理不派生類的細節
class Collider {};
class CircleCollider : public Collider
{
// Defines a circle
};
class BoxCollider : public Collider
{
// Defines a rectangle
};
class Entity
{
Collider* collider;
};
我想打一個衝突處理,我可以只傳遞了一堆的實體,讓它找出如何解決他們的衝突,但爲了做到這一點的處理程序需要知道它是什麼類型的對撞機處理。
當問題被框住喜歡這個,唯一的解決方案似乎是向下傾斜,但我想知道我是否只是接近它錯誤的方式。這似乎是一種常見的情況,但我無法找到解決方案,這讓我懷疑是否有其他方法,我沒有看到,或者這是一個只需要使用向下轉換的情況。
由於碰撞處理是特定於不同的碰撞對,它似乎並沒有在這裏使用訪問者模式,或者我錯了嗎?
聽起來像是教科書的雙重派遣 - 參見http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_in_C.2B.2B –
請參見[Double dispatch](http://en.wikipedia.org/wiki/Double_dispatch)如果每對對象需要不同的行爲。如果每個對象碰撞的都不重要,那麼@ Straw1239下面的解決方案就可以了。 – jsantander
雙派遣看起來像我正在尋找,但不知道名稱,謝謝。 – Freegor