У меня есть некий класс. В этом классе у меня есть функционал обработки команд пользователя. Свой "bash" скажем..
И вот у меня возник вопрос. В классе у меня есть private std::map, map этот состоит из пары .
Так же есть метод CommandListener, который принимает строку от пользователя. Дальше этот метод ищет по ключу совпадение со строкой пользователя и, если нашел, выполняет значение, тобишь метод.
Примерный код:
map
std::map<std::string, void(*)()> Functions = {
{"SomeF1", SomeF1},
{"SomeF2", SomeF2},
{"SomeF3", SomeF3},
{"SomeF4", SomeF4},
// ...
};
Обработчик:
void Client::CommandListener(std::string Command)
{
std::map<std::string, void(*)()>::iterator it = Functions.find(Command);
if (it == Functions.end()) std::cout << "This command does not exist\n";
else it->second();
}
Но! Проблема заключается в том, что map отказывается принимать НЕСТАТИЧЕСКИЕ методы! Т.е. SomeF1 (и остальные) мне пришлось объявить static, и только так заработало.
Я это сделал чисто случайно, и теперь мое решение.. Ну мне оно кажется костыльным =(
Подскажите, как лучше поступить в моем случае?
Спасибо!