So how does the enum parameter work? Within class CastSpell, I override PerformAction() and inside that function is a huge set of if/else statements?

Like, as a simple example somewhere in PerformAction() there might be a
Code:
if ( selected_spell == CastSpell::Sleep )
{
  spellStrength = caster->magicPower();
  attemptSetTargetStatusToAsleep ( target, spellStrength );
}
Does this mean that within the CastSpell class, I'd need to maintain (and update every time I add a new spell) within the if/else statements every single possible spell? Within the Action inheritance hierarchy, there would exist the entirety of the possibility of every single action?

My Creature objects never actually need to know how to perform any actions?