Парсер аргументов
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Alexander Zhirov d9e5e9f7fb Добавлен пример запсука 2 years ago
.vscode Чтение аргументов с предварительной обработкой 2 years ago
README.md Добавлен пример запсука 2 years ago
argpars.cpp Чтение аргументов с предварительной обработкой 2 years ago
argpars.hpp Чтение аргументов с предварительной обработкой 2 years ago

README.md

Парсер аргументов

Обработка аргументов при запуске программы.

Объект типа Hub принимает первым аргументом вектор объектов типа ConfigOption, где аргументы:

  1. Длинное имя аргумента
  2. Короткое имя аргемнта
  3. Наличие значения у аргумента: NO (НЕТ), REQUIRED (ОБЯЗАТЕЛЬНО), OPTIONAL (НЕОБЯЗАТЕЛЬНО)
  4. Указатель на предварительную функцию-обработчик перед получением фактического значения(ий) аргумента

Вторым аргументом устанавливается значение тихого режима (по умолчанию true) для отображения системных ошибок при чтении аргументов.

  • readArguments - чтение аргументов, где 3-ий аргумент функция на обработку ошибочных опций.
  • getOption - получить объект опции
    • getValues - получить значение опции. С параметром true выполнить предварительную обработку функцией, переданной в качестве аргумента при создании объекта Hub
#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[])
{
    args::Hub hub({
        {"help", 'h', args::REQUIRED, print},
        {"name", 'n', args::OPTIONAL, print}
    }, false);

    hub.readArguments(argc, argv, message);
    arguments a = hub.getOption('h').getValues(true);
    arguments b = hub.getOption('n').getValues(true);

    return 0;
}

Запуск примера:

$ ./app --help="Hello, World" -n"Александр Жиров"
Hello, World
Александр Жиров