Je travaille sur un jeu et j'essaie d'implémenter une manière intelligente de créer des objets npc en C++ à partir de l'analyse d'un fichier texte.Usine générique en C++
Actuellement, ceci est codé en dur dans un objet Factory. Comme ceci:
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+"'.";
}
Ceci est à mon avis une façon très moche de le faire. Comme il (entre autres choses) casse le Open/Closed principle.
Je suis formé en Java, et en Java je ferais quelque chose comme si chaque IActor signalait son nom de classe et son type de classe à ActorFactory au début de l'exécution du programme. L'usine stockera alors la relation dans une carte et pourra alors facilement rechercher quelle chaîne correspond à quel objet et l'instancier facilement.
Editer: Je voudrais aussi avoir la possibilité d'appeler le constructeur avec un nombre/type variable d'arguments.
Comment cela se ferait-il en C++? Peut-il être fait?
Merci pour la réponse, mais cela ne me permet pas d'avoir une liste de paramètres variables (quantité différente de paramètres et de types différents) –