Допустим, у меня будет алгебраическая функция или выражение в форме std::string
. Либо функция, либо конструктор класса примет эту строку в качестве параметра.
void function( const std::string& function ) { /* ... */ }
class Foo {
explicit Foo( const std::string& function ) { /* ... */ }
};
Тогда, скажем, у меня есть функция, которая проанализирует эту строку и затем преобразует ее в std::function
, где моя текущая сигнатура функции выглядит следующим образом:
template<typename Ret, typename... Args>
void parseStringFunc( const std::string& funcStr, std::function<Ret(Args...)>& func ) {
/*....*/
}
Теперь возникает вопрос, связанный с разбором строки. У меня есть два варианта работы, и я хотел знать, какой из них предпочтителен в качестве справочной таблицы.
- Я мог бы иметь
std::vector<char> operators { '+', '-', '*', '/', '=' }
- То же самое выше, но для цифр или цифр [0-9]
- и для букв [a-z] и [A-Z], где это будет утомительно.
- Или я мог бы сделать это проще и иметь
std::string
:
std::string operators { "+-*/=" };
std::string numbers{ "0123456789" };
std::string letters{ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" };
Мне интересно, какой вариант предпочтительнее использовать для поиска в таблице для сравнения отдельных символов в funcStr
, которые будут проанализированы для преобразования в std::function
.