gpt4 book ai didi

c++ - 如何处理 boost::program_options 中的未经请求的参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:41 25 4
gpt4 key购买 nike

我使用 boost::program_options为我的应用程序提供命令行解析界面。我想配置它来解析选项,

using namespace boost::program_options;
options_description desc("Allowed options");
desc.add_options()
("help,h", "produce help message")
("version,v", "print the version number")
("include-path,I", value< vector<string> >(), "include path")
("input-file,i", value<string>(), "input file");

positional_options_description p;
p.add("input-file", 1);

variables_map vm;

parsed_options parsed = command_line_parser(ac, av).
options(desc).positional(p).run();
store(parsed, vm);
notify(vm);

我想配置它,以便在最后一个开关之后的每个标记都以 vector 的形式返回。我试过使用 collect_unrecognized根据 Boost 文档中给出的示例,但我遇到了一些问题,因为我也在为输入文件使用位置参数。

基本上我想这样做。如果我有:

./program -i "inputfile.abc" argument1 argument2 argument3

我希望它存储 inputfile.abcinput-file值并返回 vector<string>argument1 , argument2argument3作为未经请求的参数。

但是我也希望能够有一个位置参数,这样

./program "inputfile.abc" argument1 argument2 argument3

会给我相同的结果。

如果有人问过这个问题,我很抱歉,感谢您的帮助。

最佳答案

我想出了可以解决问题的代码,但这是一个轻微的解决方法。也就是说,我放弃了位置子句并采用未识别的第一个参数。它似乎工作正常,但不是很灵活。

using namespace boost::program_options;

options_description desc("Allowed options");
desc.add_options()
("help,h", "produce help message")
("version,v", "print the version number")
("include-path,I", value< vector<string> >(), "include path")
("input-file,i", value<string>(), "input file")
;

variables_map vm;
vector<string> additionalParameters;

parsed_options parsed = command_line_parser(ac, av).
options(desc).allow_unregistered().run();
store(parsed, vm);
additionalParameters = collect_unrecognized(parsed.options,
include_positional);
notify(vm);

if (!vm.count("input-file"))
if (additionalParameters.empty())
{
cerr << "error: No input file specified\n";
return EXIT_FAILURE;
}
else
{
inputFileName = additionalParameters[0];
additionalParameters.erase(additionalParameters.begin());
}
else
inputFileName = vm["input-file"].as<string>();

关于c++ - 如何处理 boost::program_options 中的未经请求的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178525/

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