gpt4 book ai didi

c++ - boost::program_options 中带参数和不带参数的参数

转载 作者:可可西里 更新时间:2023-11-01 18:38:10 26 4
gpt4 key购买 nike

我编写了一个使用 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,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

希望这对其他人有帮助。

关于c++ - boost::program_options 中带参数和不带参数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com