подскажите, пожалуйста как это грамотно переписать, чтобы
1) В идеале чтобы не делать целую строчку при добавлении стратегии, а класть просто в какой-то вектор
2) Чтобы создавалась только та стратегия, которая нужна и каждый раз для одинаковой стратегии создавался новый объект
в идеале как-то чтобы по строке наверное создавать
хотя не уверен норм ли идея
Сам кодnamespace Strategies {
using std::unique_ptr;
std::unique_ptr<Strategy> StrategyFactory::create(const std::string &className) {
std::map<std::string, std::unique_ptr<Strategy>> strategiesMap;
strategiesMap.try_emplace("random", unique_ptr<Strategy>(new AlwaysRandom));
strategiesMap.try_emplace("always_defect", unique_ptr<Strategy>(new AlwaysDefeat));
strategiesMap.try_emplace("always_collude", unique_ptr<Strategy>(new AlwaysCollude));
strategiesMap.try_emplace("grudger", unique_ptr<Strategy>(new Grudger));
strategiesMap.try_emplace("copycat", unique_ptr<Strategy>(new CopyCat));
strategiesMap.try_emplace("detective", unique_ptr<Strategy>(new Detective));
auto it = strategiesMap.find(className);
if (it != strategiesMap.end()) {
return std::move(it->second);
}
throw std::runtime_error("no strategy found with this name: " + className);
}
}