iいろいろできると思うけどなあ
class Base {
virtual bool IsEnemy() = 0;
};
class EnemyBase : public Base { bool IsEnemy() { return true; } }
class EnemyA : public EnemyBase{}
class EnemyB : public EnemyBase{}
class A : public Base {
void OnCollide(相手){
if(相手->IsEnemy()){
EnemyBase *e = static_cast<EnemyBase *>(相手);
e->...
}
};
とかすればEnemyBaseは必要になってしまうけど、EnemyAなのかEnemyBなのかまでは知らなくて済む。