我一直在尝试使用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()
中传递和检测到默认值参数。有没有人知道变通方法或替代方案?
答案 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