使用vm.count()时,始终存在具有默认值的Boost程序选项

Boost program options with default values always present when using vm.count()

本文关键字:默认值 Boost 选项 程序 存在 count vm 使用      更新时间:2023-10-16

我一直在尝试用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
}

以检测用户是否传递了该参数。

默认值params似乎总是在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