Я работаю над игрой и пытаюсь реализовать умный способ создания npc-объектов в C++ для разбора текстового файла.Generic factory in C++
В настоящее время это жесткий код в Factory-объекте. Например:
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+"'.";
}
Это, на мой взгляд, очень уродливый способ сделать это. Так как он (между прочим) разбивает Open/Closed principle.
Я обучаюсь на Java, и в Java я бы сделал что-то вроде того, что каждый IActor сообщает, что это имя класса и тип класса для ActorFactory в начале выполнения программы. Затем фабрика сохранит отношение на карте и затем может легко найти, какие строки сопоставляются с объектом, и затем он может легко создать экземпляр.
Редактировать: Мне также хотелось бы иметь возможность вызвать конструктор с переменным числом/типом аргументов.
Как это сделать на C++? Это можно сделать?
Спасибо за ответ, но это не позволяет мне иметь список переменных параметров (различное количество параметров и разные типы) –