Сохранение предустановленных (не по умолчанию) значений при вызове boost parseOptions

В моем проекте у меня есть несколько внутренних структур конфигурации, содержащих регистрацию параметров с использованием значений по умолчанию (скажем, Config.x=0, Config.y=0), эти значения не могут быть изменены для клиента.

Иногда пользователи моего приложения хотят изменить значения этих полей по умолчанию перед анализом аргументов командной строки, поэтому перед анализом они просто изменяют эти значения вручную (скажем, Config.x=3, Config.y=4), а затем получить параметры командной строки /.ini ifle и проанализировать их с помощью parseOptions.

Если эти внешние аргументы содержат только часть этих опций, т.е. Config.x=9значения других опций будут теми, которые зарегистрированы с использованием boost::program_options, а не теми, которые назначены в настоящее время, поэтому результат будет Config.x=9, Config.y=0 вместо Config.x=9, Config.y=4, Так что в основном кажется, что boost::program_options::parseOptions очищает все параметры перед анализом.

Есть ли способ предотвратить сброс уже назначенных опций в boost, если они не отображаются в аргументах командной строки?

1 ответ

Это не может быть сделано. Тем не менее, вы должны быть в состоянии создать parsed_options либо вручную ¹, либо вы можете указать опции в виде "faux" configfile, чтобы вы могли использовать для этого парсер configfile.

Когда у вас есть parsed_options, вы можете хранить / уведомлять их как обычно.


¹ хотя это не поддерживается / не задокументировано, см. Комментарий на boost::program_option::basic_parsed_options<>

Другие вопросы по тегам