具体的な例から始めましょう。C++ では、抽象基本クラスの下にクラスの階層がありますCollisionVolume
。衝突ボリュームはdetectCollision
、他のボリュームとできる必要があります。この衝突コードは、存在する 2 つのサブクラスに基づいて特殊化されていますが、交換可能ですdetectCollision(a, b) == detectCollision(b, a)
。
オブジェクトは通常抽象基本クラスであるため、仮想関数と同様のメカニズムを使用する必要があります。ただし、一般的な仮想メソッドを使用すると、選択された関数はオペランドの 1 つの型にのみ依存し、両方には依存しません。これを行うことができた唯一の方法は、RTTI または RTTI のようなメカニズムを使用することでした。
これを行うためのよりクリーンな方法はありますか?