Я использую Boost.ProgramOptions для анализа командной строки.Некоторые из опций имеют дополнительные требования.Примером может быть nonexistingPath
, который принимает путь, который не должен существовать (сюрприз!)
. Для этого вы можете создать собственный класс, наследующий или унаследованный от bfs::path
, и перегрузить функцию validate
из Boost..ProgramOptions (см. https://www.boost.org/doc/libs/1_58_0/doc/html/program_options/howto.html#idp337860416), который проверяет, можно ли преобразовать строку в bfs::path
(не должно завершиться ошибкой), и создает исключение, если путь существует.
Но: как обрабатывать значения по умолчанию?
Насколько я могу сказать, библиотека работает следующим образом:
- Командная строка токенизации
- Для каждого найденного параметра вызывается функция
validate
, которая какрезультат преобразует полученную из командной строки строку в требуемый тип - Скопируйте его в карту значений
- Для каждого пустого параметра скопируйте значение по умолчанию в карту
Отсутствует проверка значения по умолчанию. Возможно, потому что validate
предназначен только для проверки синтаксиса, но не семантики опции.
Существует ли «стандартный» способ проверки значения по умолчаниюзначения с Boost.ProgramOptions?
Идея проверки значения в конструкторе nonexistingPath
не удалась, потому что это может / может привести к созданию значения по умолчанию, даже если пользователь перезаписал его в командной строке.Таким образом, то, что было бы необходимо, это ловушка, которая проверяет значение IFF по умолчанию, которое оно использует.