Fábrica genérica en C ++ [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Hay alguna forma de instanciar objetos de una cadena que contenga su nombre de clase? @ 9 respuestas

Estoy trabajando en un juego y estoy tratando de implementar una forma inteligente de crear objetos npc en C ++ analizando un archivo de texto.

Actualmente, esto está codificado en un objeto Factory. Me gusta esto

IActor * ActorFactory::create(string actortype, Room * r, string name, int hp)
{
    if(actortype == "Troll")
    {
        return new Troll(r, name, hp);
    }
    if (actortype == "Dragon")
    {
        return new Dragon(r, name, hp);
    }
    // ... and so on
    throw "Can't recognize type '"+actortype+"'.";
}

Esta es, en mi opinión, una forma muy fea de hacerlo. Dado que (entre otras cosas) rompe la Principio abierto / cerrado.

Soy educado en Java, y en Java haría algo como hacer que cada IActor informe su nombre de clase y tipo de clase al ActorFactory al comienzo de la ejecución del programa. Luego, la fábrica almacenaría la relación en un mapa y luego podría buscar fácilmente qué correlaciones asigna a qué objeto y luego podría instanciarla fácilmente.

Edit: También me gustaría tener la capacidad de llamar al constructor con un número variable / tipo de argumentos.

¿Cómo se haría esto en C ++? ¿Se puede hacer

Respuestas a la pregunta(4)

Su respuesta a la pregunta