Я пишу код, который выглядит так:
set<int> affected_items;
while (string code = GetKeyCodeFromSomewhere())
{
if (code == "some constant" || code == "some other constant") {
affected_items.insert(some_constant_id);
} else if (code == "yet another constant" || code == "the constant I didn't mention yet") {
affected_items.insert(some_other_constant_id);
} // else if etc...
}
for (set<int>::iterator it = affected_items.begin(); it != affected_items.end(); it++)
{
switch(*it)
{
case some_constant_id:
RunSomeFunction(with, these, params);
break;
case some_other_constant_id:
RunSomeOtherFunction(with, these, other, params);
break;
// etc...
}
}
Причина, по которой я заканчиваю писать этот код, заключается в том, что мне нужно запускать функции во втором цикле только один раз, даже если я получил несколько кодов клавиш, которые могут привести к их запуску.
Это просто не лучший способ сделать это. Есть ли более аккуратный способ?