Пишу эмулятор Bash под Windows. Есть класс Command, который состоит с оператора, вектора аргументов, и вектора опций. В этом классе есть метод isOperatorRegistered(), который проверяет зарегистрирован ли полученный оператор. Колд этого метода (ну и вспомогательного):
bool Command::isOperatorRegistered()
{
bool isOperator_Registered = false;
/*static*/ std::vector<std::string> registeredOperators;
fillRegisteredOperatorsVector(registeredOperators);
if (std::find(registeredOperators.begin(), registeredOperators.end(), operator_) == registeredOperators.end())
isOperator_Registered = false;
else
isOperator_Registered = true;
return isOperator_Registered;
}
void fillRegisteredOperatorsVector(std::vector<std::string>& registeredOperators)
{
registeredOperators.reserve(6);
registeredOperators.push_back("pwd");
registeredOperators.push_back("ls");
registeredOperators.push_back("cd");
registeredOperators.push_back("cp");
registeredOperators.push_back("mw");
registeredOperators.push_back("rm");
}
Да, fillRegisteredOperatorsVector выглядит как костыль, но всё же суть не в том. Логично было бы, чтобы существовало статическое поле-вектор registeredOperators, ибо оно общее для всех экземпляров класса и нету смысла его дублировать. Но получается, что клиенту класса нужно будет самому вручную его инициализировать. Или это можно сделать и внутри класса? Если да, то как? Если нет, то как правильно спроектировать этот момент?