У меня есть иерархия классов как таковая:
Entity
Stationary
Tree
Creature
Bear
Crow
И у меня есть Мир и Игрок. Когда игрок сталкивается с чем-то, он получает вызов handleCollision (Entity * entity), а затем в зависимости от того, что происходит, происходят разные вещи; если игрок врезается в дерево, то ничего не происходит, пока игрок атакует, если это медведь. Проблема в том, что я не уверен, как правильно различать дела.
Одна мысль, которая пришла в голову, - это нечто подобное. Player :: handleCollision (Entity *) вызывает Entity-> handleCollisionHelper (Player &). Это виртуальная функция, которая в Tree ничего не делает, а в Creature (она должна атаковать все существа) вызывает Player.handleCollisionCreature (this), а затем помещает код атаки в handleCollisionCreature. Есть ли лучший способ сделать это без использования RTTI (typeid и т. Д.)?