讓我從一個具體的例子開始。在C++中,我在抽象基類CollisionVolume
下有一個類的層次結構。任何碰撞體積都需要能夠與其他任何體積的detectCollision
。這個碰撞代碼是基於存在的兩個子類而專門設計的,但它是可交換的:detectCollision(a, b) == detectCollision(b, a)
。帶兩個操作數的虛擬函數可以採用多種不同的類型
我需要使用類似於虛擬函數的機制,因爲對象通常是抽象基類。但是,如果我使用典型的虛擬方法,所選函數只能取決於其中一個操作數的類型,而不能同時取決於兩者。我能做到這一點的唯一方法是使用RTTI或類似RTTI的機制。
有沒有清潔的方式做到這一點?
您可以在C++ 11中使用多派遣:http://ideone.com/lTsc7M – Jarod42 2014-02-04 16:41:21