Позвольте мне начать с конкретного примера. В C ++ у меня есть иерархия классов в рамках абстрактного базового класса CollisionVolume
. Любой объем столкновения должен быть в состоянии detectCollision
с любым другим объемом. Этот код столкновения специализируется на основе присутствия двух подклассов, но он коммутативен: detectCollision(a, b) == detectCollision(b, a)
.
Мне нужно использовать механизм, аналогичный виртуальным функциям, поскольку объекты обычно имеют абстрактный базовый класс. Однако, если я использую типичные виртуальные методы, выбранная функция может зависеть только от типа одного операнда, а не от обоих. Единственный способ сделать это - использовать RTTI или механизм, похожий на RTTI.
Есть ли более чистый способ сделать это?