¿Puedo usar un número constante para elegir una clase en tiempo de compilación, posiblemente usando plantillas?

Digamos que tengo un valor constante (posiblemente de algún tipo de enumeración). Digamos que tengo muchas clases A, B, D, etc.

¿Puedo tener algo como esto?

C<1> anInstanceOfA; //This will be of type A
C<2> anInstanceOfB; //This will be of type B
C<3> anInstanceOfD; //This will be of type D

Entonces, ¿es posible seleccionar una clase basada en un número constante en el momento de la compilación?

El problema general es que estoy tratando de seleccionar un functor basado en una tabla, en la que el índice es una enumeración. Me gustaría evitar el polimorfismo si es posible.

Editar: Para este proyecto no puedo usar C ++ 11, gracias de todos modos a quienes respondieron en ese contexto, es muy interesante saberlo de todos modos.
Edición 2: En general, puedo tener más de 2 clases objetivo, he editado mi pregunta

Respuestas a la pregunta(3)

Su respuesta a la pregunta