Crear dinámicamente una instancia de una clase a partir de una cadena que contiene el nombre de la clase en C ++
Digamos que tengo una clase base con 100 niños:
class Base {
virtual void feed();
...
};
class Child1 : public Base {
void feed(); //specific procedure for feeding Child1
...
};
...
class Child100 : public Base {
void feed(); //specific procedure for feeding Child100
...
};
En tiempo de ejecución, quiero leer un archivo que contiene qué hijos crear y alimentar. Digamos que he leído el archivo y el vector de cadenas "nombres" contiene los nombres de las clases secundarias (es decir, Child1, Child4, Child99). Ahora voy a iterar a través de estas cadenas, crear una instancia del niño específico y alimentarlo con su procedimiento de alimentación específico:
vector<Base *> children;
for (vector<string>::iterator it = names.begin(); it != names.end(); ++it) {
Base * child = convert_string_to_instance(*it)
child->feed()
children.push_back(child);
}
¿Cómo crearía la función convert_string_to_instance () de modo que si toma la cadena "Child1" devuelve un "nuevo Child1", si el argumento de la cadena es "Child4" devuelve un "nuevo Child4", etc.
<class C *> convert_string_to_instance(string inName) {
// magic happens
return new C; // C = inName
// <brute force?>
// if (inName == "Child1")
// return new Child1;
// if (inName == "Child2")
// return new Child2;
// if (inName == "Child3")
// return new Child3;
// </brute force>
}