使用vm.count()时,使用默认值提升程序选项

时间:2012-02-08 20:06:48

标签: c++ boost boost-program-options

我一直在尝试使用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 个答案:

答案 0 :(得分:20)

使用boost::program_options::variable_value::defaulted()

if (vm["magic-wings-threshold"].defaulted())  {
    // assume defaulted value
} else {
    // one was provided
}

答案 1 :(得分:0)

如果你想区分

-k option not provided
-k provided

您应该使用po :: value() - &gt; implicit_value (),您可以通过以下方式告诉不同的情况:

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