Simulando la coincidencia de patrones de estilo ML en C ++

El título dice casi todo, cómo me gustaría simular la coincidencia de patrones de estilo ML en C ++, es decir, por ejemplo;

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

Donde 'IfThen', 'IfThenElse' y 'While' son clases que heredan de 'Statement'

Respuestas a la pregunta(1)

Su respuesta a la pregunta