Этот шаблонный класс реализует паттерн проектирования "Builder": ссылки на объекты этого
класса должна возвращать функция добавления аргумента из ArgParser, к нему должен
обращаться пользователь, добавляя информацию об аргументе. Реализует функции добавления
любой информации про аргумент и функцию построения. Наследует абстрактному классу
ArgumentBuilder. Параметр шаблона — имя типа T, удовлетворяющего ProperArgumentType. Находится в пространстве имён
ArgumentParser.
Объявлен в ConcreteArgumentBuilder.hpp.
Определен там же.
Зависит от ConcreteArgument.hpp, ArgumentBuilder.hpp, ArgParserConcepts.hpp.
- Документация класса ArgParser — информация об общем использовании библиотеки.
Класс не имеет публичных полей.
Принимает короткий ключ в виде char, длинный ключ в виде std::string_view,
описание аргумента в виде std::string.
Не предназначен для прямого вызова пользователем, поскольку имеет смысл только во
внутренней логике класса ArgParser.
ConcreteArgumentBuilder(char short_name, const char* long_name, const char* description);Конструктор без параметров и конструктор копирования, а также оператор присваивания с копированием удалены.
ConcreteArgumentBuilder() = delete;
ConcreteArgumentBuilder(const ConcreteArgumentBuilder& other) = delete;
ConcreteArgumentBuilder& operator=(const ConcreteArgumentBuilder& other) = delete;Метод, отвечающий за придание аргументу свойства принятия множества значений. Принимает минимальное обязательно число значений (по умолчанию ноль). Возвращает ссылку на этот аргумент.
ConcreteArgumentBuilder& MultiValue(size_t min = 0);Метод, отвечающий за придание аргументу свойства позиционности — считывания значения аргумента без ключа. Возвращает ссылку на этот аргумент.
ConcreteArgumentBuilder& Positional();Метод, отвечающий за придание аргументу свойства хранения значения во внешней переменной. Принимает ссылку на переменную, где должно храниться значение. Возвращает ссылку на этот аргумент.
ConcreteArgumentBuilder& StoreValue(T& value);Метод, отвечающий за придание аргументу свойства хранения значений во внешнем
std::vector. Принимает ссылку на std::vector<T>, где должны храниться значения.
Возвращает ссылку на этот аргумент.
ConcreteArgumentBuilder& StoreValues(std::vector<T>& values);Метод, отвечающий за придание аргументу значения по умолчанию. Принимает значение по умолчанию. Возвращает ссылку на этот аргумент.
ConcreteArgumentBuilder& Default(T value);Метод, отвечающий за определение функции валидации для аргумента. Принимает
std::function валидации, которая должна принимать единственный аргумент: ссылку на
std::string, и возвращать bool. Под валидацией подразумевается проверка на общую
корректность потенциального значения. Функция валидации по умолчанию всегда принимает
истинное значение. Возвращает ссылку на этот аргумент.
ConcreteArgumentBuilder& AddValidate(const std::function<bool(std::string&)>& validate);Метод, отвечающий за определение функции валидации для аргумента. Принимает
std::function проверки, которая должна принимать единственный аргумент: ссылку на
std::string, и возвращать bool. Под проверкой подразумевается проверка на полную
корректность потенциального значения. Функция проверки по умолчанию всегда принимает
истинное значение. Возвращает ссылку на этот аргумент.
ConcreteArgumentBuilder& AddIsGood(const std::function<bool(std::string&)>& is_good);Метод, отвечающий за создание аргумента по переданным параметрам. Не принимает никаких
аргументов. Возвращает указатель на интерфейс аргумента. Если значения по умолчанию
нет, а также аргумент не является MultiValue, то считается, что он обязательный. Если
аргумент логического типа (Flag), то считается, что его значение по умолчанию -
false, если пользователь не указал иного. Не предназначен для прямого вызова
пользователем, поскольку имеет смысл только во внутренней логике классаArgParser.
Argument* build() override;Метод, предоставляющий информацию об аргументе в виде структуры ArgumentInformation,
хранящая типонезависимую информацию об аргументе. Ничего не принимает. Возвращает
неизменяемую ссылку на объект ArgumentInformation. Не модифицирует объект. Не должен
вызываться без использования значения.
[[nodiscard]] const ArgumentInformation& GetInfo() const override;Метод, предоставляющий информацию о значении аргумента по умолчанию в виде строки.
Ничего не принимает. Возвращает std::string со строковым представлением значения
по умолчанию. Не модифицирует объект. Не должен вызываться без использования значения.
[[nodiscard]] std::string GetDefaultValue() const override;Short-int16_t: 16-битное знаковое число. Получается из целочисленного литерала, подходящего под ограничения 16-битного знакового числа и являющегося подходящим (таким, что функция проверки принимает истинное значение).Int-int32_t: 32-битное знаковое число. Получается из целочисленного литерала, подходящего под ограничения 32-битного знакового числа и являющегося подходящим.LongLong-int64_t: 64-битное знаковое число. Получается из целочисленного литерала, подходящего под ограничения 64-битного знакового числа и являющегося подходящим.UnsignedShort-uint16_t: 16-битное беззнаковое число. Получается из целочисленного литерала, подходящего под ограничения 16-битного беззнакового числа и являющегося подходящим.UnsignedInt-uint32_t: 32-битное беззнаковое число. Получается из целочисленного литерала, подходящего под ограничения 32-битного беззнакового числа и являющегося подходящим.UnsignedLongLong-uint64_t: 64-битное беззнаковое число. Получается из целочисленного литерала, подходящего под ограничения 64-битного беззнакового числа и являющегося подходящим.
Float-float: 32-битное число с плавающей точкой. Получается из дробного литерала, подходящего под ограничения 32-битного числа с плавающей точкой и являющегося подходящим.Double-double: 64-битное число с плавающей точкой. Получается из дробного литерала, подходящего под ограничения 64-битного числа с плавающей точкой и являющегося подходящим.LongDouble-long double: 80-битное число с плавающей точкой. Получается из дробного литерала, подходящего под ограничения 80-битного числа с плавающей точкой и являющегося подходящим.
Flag-bool: логическая переменная. Значение по умолчанию всегдаfalse, при наличии среди аргументов командной строки флага считаетсяtrue. Также возможно явное указание значения по аналогии с прочими аргументами: false и 0 считываются какfalse, true и 1 считываются какtrue.Char-char: символ. Получается из подходящего символьного литерала — escape sequence или одного символа, также возможно задание в виде\xXX, при этом0xXX- код символа в шестнадцатеричной системе счисления, а также в виде\XXX, при этом0XXX- код символа в восьмеричной системе счисления.
String-std::string: строка. Получается из строкового литерала без пробелов, являющегося подходящим.CompositeString-CompositeString: удовлетворяющая требованию строка, возможно, содержащая пробелы. Получается из одного или нескольких идущих подряд (разделённых пробелами) строковых литералов, прошедших валидацию и обладающих следующим свойством: вся строка является подходящей, но если убрать из нее любое ненулевое количество литералов, то она перестанет быть таковой.