使用vm.count()时,始终存在具有默认值的Boost程序选项
Boost program options with default values always present when using 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
}
以检测用户是否传递了该参数。
默认值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
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- boost::p rogram_options 自定义验证和默认值
- Boost.Spirit.Qi 语法,用于 Boost.Fusion 自适应结构中的默认值
- 使用Boost Spirit将默认值分配给变量
- Boost HANA:从集合创建地图和默认值
- boost::p rogram_options:是否可以将一个选项设置为另一个选项的默认值
- 向量值boost :: program_options的默认值
- 如何在<string> boost::p rogram_options 中指定矢量的默认值
- boost::绑定具有默认值的成员函数
- 为什么 boost::p rogram_options 在定义默认值时会抛出有关必需参数的错误
- 使用vm.count()时,始终存在具有默认值的Boost程序选项
- 使用boost program_options处理帮助消息,删除默认值或重新格式化帮助消息
- 在Boost::Program_Options中,如何设置wstring的默认值
- Boost Spirit Qi符号默认值和NULL值