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

10-06 01:53