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>
  }

Respuestas a la pregunta(7)

Su respuesta a la pregunta