Simulando a correspondência de padrões no estilo ML em C ++

O título diz praticamente tudo, como eu poderia simular a correspondência de padrões no estilo ML em C ++, por exemplo;

Statement *stm;
match(typeof(stm))
{
    case IfThen: ...
    case IfThenElse: ...
    case While: ...
    ...
}

Onde 'IfThen', 'IfThenElse' e 'While' são classes que herdam de 'Statement'

questionAnswers(1)

yourAnswerToTheQuestion