Design – Convert Template Type to Derived Type When Calling a Function?

Sorry, if the title is wrong, I can not think of a better formulation. I have the following code

template 
void ResolveEntityHit (E & entity, projectile & bullet) {
static_assert (std :: is_base_of:: value, "entity must be of entity type");

entity.DealDamage (projectile.GetProjectileDamage ());

if (entity.IsDead ()) {
DestroyEntity (entity); // here is the problem
}

m_projectileManager-> DestroyProjectile (projectile);
}

void DestroyEntity (Enemy & Enemy)
{
m_enemyManager-> DestroyEnemy (Enemy);
}

void DestroyEntity (Bunker & Bunker)
{
m_bunkerManager-> DestroyBunker (Bunker);
}

I try to avoid dynamischer_cast As I read, this is not a good practice. I try to keep that ResolveEntityHit As simple as possible, that can accept several types, but then I want to branch out and do different things, depending on what kind of entity it is.
For example, I have divided my entities into different classes, and each class is responsible for removing / adding entities. Therefore, I need to call the function in the correct manager to remove the entity.

The code above does not compile and I get Error C2664: 'void DestroyEntity (Bunker &) & # 39 ;: argument 1 can not be deleted from & # 39; E & # 39; in & # 39; enemy && # 39; be converted

I hope it is clear what I want to achieve, but I wonder if there is a better way, in terms of design / architecture and without the use of dynamischer_cast? Maybe through the use of templates?