Расширенные параметры программы со значениями по умолчанию всегда присутствуют при использовании vm.count()

Я пытаюсь проверить мои переданные опции с 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

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

-k option not provided
-k provided

Вы должны использовать po:: value() → implicit_value(), вы можете рассказать о разных ситуациях:

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