Проверьте значение по умолчанию с Boost.ProgramOptions - PullRequest
0 голосов
/ 29 марта 2019

Я использую 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 по умолчанию, которое оно использует.

...