【问题标题】:How to pass program options in boost without argument name having all other options beeing fully avalible如何在没有参数名称且所有其他选项完全可用的情况下在 boost 中传递程序选项
【发布时间】:2016-01-30 05:16:35
【问题描述】:

我想知道如何在 boost 中传递程序选项而不给出像 program.exe var1 这样的参数名称而不是 program.exe --arg1 var1。但是我知道如何在没有 boost lib 的情况下处理这个问题,只需获得argv[1]

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

【问题讨论】:

    标签: c++11 boost-program-options


    【解决方案1】:

    tutorial 就是这样一个例子:

    “输入文件”选项指定要处理的文件列表。一开始没关系,但是,当然,写这样的东西:

    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 函数。后者是简单案例的便捷包装器,但现在我们需要传递额外的信息。

    【讨论】:

    • 因此,如果我只希望 input-file 成为第二个位置选项,我需要将 -1 更改为 1 吗?
    • 不,这不是我想做的。我需要编写两种情况:一种,当我必须指定所有参数时;二,当我只有一个参数时 - fileName 现在我知道如何处理第一个参数,但问题是第二个参数 - 如何在 boost 中处理所有参数。
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多