From e50baa07245d36ceaabfcd7f49a48d81b38fa8a8 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Wed, 31 Aug 2022 15:32:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 52 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index cf6826d..5659970 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,48 @@ # Парсер аргументов +Обработка аргументов при запуске программы. + + +Объект типа `Hub` принимает первым аргументом вектор объектов типа `ConfigOption`, где аргументы: + +1. Длинное имя аргумента +2. Короткое имя аргемнта +3. Наличие значения у аргумента: `NO` (НЕТ), `REQUIRED` (ОБЯЗАТЕЛЬНО), `OPTIONAL` (НЕОБЯЗАТЕЛЬНО) +4. Указатель на предварительную функцию-обработчик перед получением фактического значения(ий) аргумента + +Вторым аргументом устанавливается значение тихого режима (по умолчанию `true`) для отображения системных ошибок при чтении аргументов. + +- `readArguments` - чтение аргументов, где 3-ий аргумент функция на обработку ошибочных опций. +- `getOption` - получить объект опции + - `getValues` - получить значение опции. С параметром `true` выполнить предварительную обработку функцией, переданной в качестве аргумента при создании объекта `Hub` + ```cpp +#include + +void message() +{ + std::cout << "Неверный аргумент" << std::endl; + exit(1); +} + +typedef std::vector arguments; + +arguments print(const arguments &v) +{ + std::cout << v.front() << std::endl; + return v; +} + int main(int argc, char *argv[]) { - ArgPars cfg(error, false); - cfg.addKey('h', "hello", ArgPars::NO); - cfg.addKey('m', "my", ArgPars::OPTIONAL); - cfg.addKey('w', "world", ArgPars::REQUIRED); - cfg.readArguments(argc, argv); + args::Hub hub({ + {"help", 'h', args::REQUIRED, print}, + {"name", 'n', args::OPTIONAL, print} + }, false); - if (cfg.checkKey('h')) - std::cout << "h установлен" << std::endl; - - if (cfg.checkKey('m')) - std::cout << "m установлен " << cfg.getValue('z') << std::endl; - - if (cfg.checkKey('w')) - std::cout << "w установлен" << std::endl; + hub.readArguments(argc, argv, message); + arguments a = hub.getOption('h').getValues(true); + arguments b = hub.getOption('n').getValues(true); return 0; }