相关疑难解决方法(0)

使用' - '作为选项结束标记与boost :: program_options

指示命令行程序选项结束的传统方法是使用该选项--.如何让boost :: program_options将此识别为一个选项并接受命令行的其余部分作为位置参数?以下不起作用:

namespace po = boost::program_options;

po::positional_options_description posOpts;
posOpts.add("keywords", 1);
posOpts.add("input", 1);

std::vector<std::string> final_args;

po::options_description desc("Allowed Options");
desc.add_options()
  ...
  ("", po::value< std::vector<std::string> >(&final_args)->multitoken(), "end of options")
  ...
  ;

po::command_line_parser(argc, argv).options(desc).positional(posOpts).run();
Run Code Online (Sandbox Code Playgroud)

如果我foo bar作为参数给出,我什么都没有final_args(正如预期的那样),但是当我-- foo bar作为参数给出时(我期望找到final_args[0] == "foo"final_args[1] == "bar").我在这里假设这--是一个长参数,空字符串作为其参数名称.相反,如果它应该被解释为一个短参数,-作为参数名称,我该如何指定?从我可以看到,将参数规范从""to 更改为",-"不影响结果.

如何让boost :: program_options --正确处理?

编辑:这是尝试通过创建一个Tim Sylvester建议extra_style_parser:

std::vector<po::option> end_of_opts_parser(std::vector<std::string>& args) {
  std::vector<po::option> result;

  std::vector<std::string>::const_iterator i(args.begin());
  if (i …
Run Code Online (Sandbox Code Playgroud)

c++ boost-program-options

16
推荐指数
3
解决办法
2456
查看次数

标签 统计

boost-program-options ×1

c++ ×1