Ответ 1
использовать boost::program_options::variable_value::defaulted()
if (vm["magic-wings-threshold"].defaulted()) {
// assume defaulted value
} else {
// one was provided
}
Я пытаюсь проверить мои переданные опции с 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()
. Кто-нибудь знает обходное решение или альтернативу?
использовать boost::program_options::variable_value::defaulted()
if (vm["magic-wings-threshold"].defaulted()) {
// assume defaulted value
} else {
// one was provided
}
Если вы хотите рассказать разницу между
-k option not provided
-k provided
Вы должны использовать po:: value() → implicit_value(), вы можете рассказать о разных ситуациях:
-k option not provided -> vm["k"]==0
-k option provided -> vm["k"]==1