我写了一个小应用程序,它使用boost :: program_options进行命令行解析.
如果参数存在,我想有一些设置值的选项,如果给出参数但是没有参数,则交替打印当前值.所以“设置模式”看起来像:
如果参数存在,我想有一些设置值的选项,如果给出参数但是没有参数,则交替打印当前值.所以“设置模式”看起来像:
dc-ctl --brightness 15
和“获取模式”将是:
dc-ctl --brightness brightness=15
问题是,我不知道如何在不捕获此异常的情况下处理第二种情况:
error: required parameter is missing in 'brightness'
解决方法
我从
How to accept empty value in boost::program_options得到了一个部分解决方案,建议对那些可能存在或不存在参数的参数使用implicit_value方法.
所以我初始化“brightness”参数的调用如下所示:
所以我初始化“brightness”参数的调用如下所示:
("brightness,b",po::value<string>()->implicit_value(""),
然后我迭代变量映射,对于任何一个字符串的参数,我检查它是否为空,如果是,我打印当前值.该代码如下所示:
// check if we're just printing a feature's current value bool gotFeature = false; for (po::variables_map::iterator iter = vm.begin(); iter != vm.end(); ++iter) { /// parameter has been given with no value if (iter->second.value().type() == typeid(string)) if (iter->second.as<string>().empty()) { gotFeature = true; printFeatureValue(iter->first,camera); } } // this is all we're supposed to do,time to exit if (gotFeature) { cleanup(dc1394,camera,cameras); return 0; }
更新:这改变了上述语法,当使用隐式值时,现在参数在给定时必须是以下形式:
./dc-ctl -b500
代替
./dc-ctl -b 500
希望这对其他人有帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。