Существует несколько неприятных устаревших кодов.
std::string xxx = GetCommand(); // get "CommandX";
if (xxx == "Command1")
{
return new Command1();
}
else if (xxx == "Command2")
{
return new Command2();
}
...
else if (xxx == "Command100")
{
return new Command100();
}
Я хочу улучшить эту структуру кода.
Слишком много сравнения. Поэтому я помещаю их на карту.
for (int i = 0; i < GetCommandCount(); ++i)
{
// key is a command string
// value is a function pointer which creates it instance
map.insert(command, a function pointer);
}
// then
ICommand* pCommand = map.getInstance(command);
Но этот способ должен выполнять дополнительную функцию каждый раз, если приходит новая команда.
Да, функции могут быть разумными. Но все функции просто return new CommandNNN();
Я думаю, что есть способ удалить дублирование.
Как вы думаете?