Разбор алгебраической функции или выражения из строки - PullRequest
1 голос
/ 07 марта 2019

Допустим, у меня будет алгебраическая функция или выражение в форме 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...