C++11 如何在boost中传递程序选项而不使用参数名,使所有其他选项完全可用

C++11 如何在boost中传递程序选项而不使用参数名,使所有其他选项完全可用,c++11,boost-program-options,C++11,Boost Program Options,我想知道如何在boost中传递程序选项,而不指定参数名,比如program.exe var1,而不是program.exe--arg1 var1。然而,我知道如何在不使用boost库的情况下处理这个问题,只需获得argv[1] 有两种情况:一种是,当我必须用它们的argname指定所有arg时;另一种是,当我只有一个参数-fileName时,现在我知道如何处理第一个参数,但问题是第二个参数-如何通过boost lib中的所有参数一起处理它?或者简单地说,可以这样做吗?有这样一个例子: “输入文件

我想知道如何在boost中传递程序选项,而不指定参数名,比如
program.exe var1
,而不是
program.exe--arg1 var1
。然而,我知道如何在不使用boost库的情况下处理这个问题,只需获得
argv[1]

有两种情况:一种是,当我必须用它们的argname指定所有arg时;另一种是,当我只有一个参数-
fileName
时,现在我知道如何处理第一个参数,但问题是第二个参数-如何通过boost lib中的所有参数一起处理它?或者简单地说,可以这样做吗?

有这样一个例子:

“输入文件”选项指定要处理的文件列表。这是一个好的开始,但是,当然,写一些像:

compiler --input-file=a.cpp
与之相比,有点不标准

compiler a.cpp
我们马上就解决这个问题

如上所述,没有选项名称的命令行标记被此库称为“位置选项”。它们也可以处理。在用户的帮助下,库可以确定“a.cpp”的真正含义与“-input file=a.cpp”相同。以下是我们需要的附加代码:

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

po::variables_map vm;
po::store(po::command_line_parser(ac, av).
          options(desc).positional(p).run(), vm);
po::notify(vm);
前两行表示所有位置选项都应转换为“输入文件”选项。还要注意,我们使用command_line_parser类来解析命令行,而不是parse_command_line函数。后者是简单案例的方便包装器,但现在我们需要传递附加信息


因此,如果我只想将
输入文件
作为第二个位置选项,我需要将-1更改为1?不,这不是我想要做的。我需要编写两种情况的代码:一种,当我必须指定所有参数时;第二,当我只有一个参数时——文件名,现在我知道如何处理第一个参数,但问题是第二个参数——如何在boost中处理所有参数。