Параметры программы Boost со значениями по умолчанию всегда присутствуют при использовании vm.count () - PullRequest
15 голосов
/ 09 февраля 2012

Я пытался проверить мои переданные параметры с помощью boost :: program_options. Моя команда имеет несколько режимов, каждый из которых имеет связанные параметры, которые можно указать. То, что я пытаюсь сделать, это убедиться, что эти связанные параметры передаются в режиме, т. Е.

unicorn --fly --magic-wings-threshold

Где --fly - режим, а --magic-wings-threshold - связанный параметр. Я заметил, что --magic-wings-threshold имеет значение по умолчанию, например,

("magic-wings-threshold,w", po::value<double>(&wings_thresh)->default_value(0.8, "0.8"),
           "Magic wings maximum power"
)

тогда я не могу использовать

if (vm.count("magic-wings-threshold")( {
    // do stuff
}

чтобы определить, передал ли пользователь этот параметр.

Похоже, что значения по умолчанию всегда передаются и обнаруживаются в vm.count(). Кто-нибудь знает обходной путь или альтернативу?

Ответы [ 2 ]

20 голосов
/ 09 февраля 2012

использование boost::program_options::variable_value::defaulted()

if (vm["magic-wings-threshold"].defaulted())  {
    // assume defaulted value
} else {
    // one was provided
}
0 голосов
/ 02 сентября 2016

Если вы хотите узнать разницу между

-k option not provided
-k provided

Вы должны использовать po :: value () -> implicit_value (). Различные ситуации можно указать с помощью:

-k option not provided  ->  vm["k"]==0  
-k option provided      ->  vm["k"]==1
...