Описание

This commit is contained in:
Alexander Zhirov 2022-08-31 15:32:11 +03:00
parent ba8e55d9c0
commit e50baa0724
1 changed files with 39 additions and 13 deletions

View File

@ -1,22 +1,48 @@
# Парсер аргументов # Парсер аргументов
Обработка аргументов при запуске программы.
Объект типа `Hub` принимает первым аргументом вектор объектов типа `ConfigOption`, где аргументы:
1. Длинное имя аргумента
2. Короткое имя аргемнта
3. Наличие значения у аргумента: `NO` (НЕТ), `REQUIRED` (ОБЯЗАТЕЛЬНО), `OPTIONAL` (НЕОБЯЗАТЕЛЬНО)
4. Указатель на предварительную функцию-обработчик перед получением фактического значения(ий) аргумента
Вторым аргументом устанавливается значение тихого режима (по умолчанию `true`) для отображения системных ошибок при чтении аргументов.
- `readArguments` - чтение аргументов, где 3-ий аргумент функция на обработку ошибочных опций.
- `getOption` - получить объект опции
- `getValues` - получить значение опции. С параметром `true` выполнить предварительную обработку функцией, переданной в качестве аргумента при создании объекта `Hub`
```cpp ```cpp
#include <argpars.hpp>
void message()
{
std::cout << "Неверный аргумент" << std::endl;
exit(1);
}
typedef std::vector<std::string> arguments;
arguments print(const arguments &v)
{
std::cout << v.front() << std::endl;
return v;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
ArgPars cfg(error, false); args::Hub hub({
cfg.addKey('h', "hello", ArgPars::NO); {"help", 'h', args::REQUIRED, print},
cfg.addKey('m', "my", ArgPars::OPTIONAL); {"name", 'n', args::OPTIONAL, print}
cfg.addKey('w', "world", ArgPars::REQUIRED); }, false);
cfg.readArguments(argc, argv);
if (cfg.checkKey('h')) hub.readArguments(argc, argv, message);
std::cout << "h установлен" << std::endl; arguments a = hub.getOption('h').getValues(true);
arguments b = hub.getOption('n').getValues(true);
if (cfg.checkKey('m'))
std::cout << "m установлен " << cfg.getValue('z') << std::endl;
if (cfg.checkKey('w'))
std::cout << "w установлен" << std::endl;
return 0; return 0;
} }