gpt4 book ai didi

c++ - Boost::Program_options,传递一个未知的命令行参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:02 24 4
gpt4 key购买 nike

我正在使用 boost::program_options 为我的程序传递配置文件。特别是我经常使用命令行覆盖一些选项。例如,如果我注册了两个选项“opt1”和“opt2”,我可以通过使用

运行我的程序来成功覆盖默认值
 myProgram.exe --opt1=option_value_1 --opt2=option_value_2

一切都很好,但已经发生过几次我错误地运行我的程序

 myProgram.exe --opt1=option_value_1 opt2=option_value_2

在这种情况下(缺少双连字符)不会引发错误。事实上,我显然可以将 myProgram 运行为

 myProgram.exe list of any unregistered and unknown values

它仍然可以正常运行。我希望至少能得知发生了意想不到的事情。我的问题有解决方案吗?

最佳答案

您应该从您的解析命令中删除 allow_unregistered()。你的命令应该只是

po::store(parse_command_line(argc, argv, desc), vm);

然后将在未知选项上抛出异常。

http://www.boost.org/doc/libs/1_54_0/doc/html/program_options/howto.html#idp123440592

如果你想要异常/错误,如果选项没有“--”你应该写额外的解析器,像这样的东西,可以帮助你

std::pair<std::string, std::string> fix_option(const std::string& value)
{
std::string name = value;
std::string val;
std::string::size_type pos = name.find("=");
if (pos != std::string::npos)
{
val = name.substr(pos + 1);
name = name.substr(0, pos);
}
if (name.substr(0, 2) != "--")
{
throw std::logic_error(std::string("invalid command, no -- in command: ") + name);
}
return std::make_pair(name.substr(2), val);
}

code example

结果:

./new --help=j

output: j

./new help=j

output:
terminate called after throwing an instance of 'std::logic_error'
what(): invalid command, no -- in command: help

关于c++ - Boost::Program_options,传递一个未知的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742259/

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