imagine que tengo un montón de clases relacionadas con C++ (todas extendiendo la misma clase base y proporcionando el mismo constructor) que declare en un archivo de encabezado común (que incluyo), y sus implementaciones en algunos otros archivos (que compilo y vincular estáticamente como parte de la compilación de mi programa).¿Crear una instancia de clase desde su nombre?
Me gustaría poder crear una instancia de uno de ellos pasando el nombre, que es un parámetro que se debe pasar a mi programa (ya sea como línea de comando o como macro de compilación).
La única solución posible que veo es utilizar una macro:
#ifndef CLASS_NAME
#define CLASS_NAME MyDefaultClassToUse
#endif
BaseClass* o = new CLASS_NAME(param1, param2, ..);
Es el único enfoque valioso?
"Una versión extendida de eso (permitiendo secciones de código independientes para registrar sus clases) sería un mapa." ¿sería posible, a partir de una definición de clase, registrarse en ese mapa, suponiendo que este mapa está en una fábrica en otro lugar? En Java podría/haría usando constructores estáticos {}. De hecho, no quiero para cada nueva subclase que escribo modificar el código de la fábrica. –
puccio