Boost Program Options默默地忽略未知值令牌。为什么?

时间:2013-04-26 13:58:14

标签: boost-program-options

我正在使用Boost程序选项来解析CLI。

我面临的问题是,如果CLI中没有“ - ”或“ - ”之前有任何令牌,那么库会默默地忽略它而不是抛出异常。

以下是示例程序:

try
{
    options_description od;
    od.add_options()
        ("dummy,d", value<int>()->required(), "does nothing...");

    variables_map vm;
    wparsed_options po = parse_command_line(argc, argv, od);
    store(po, vm);
    notify(vm);

    cout << vm["dummy"].as<int>() << endl;
}
catch (const error& e)
{
    cout << e.what() << endl;
}

以下是一些示例运行:

Debug>test
the option '--dummy' is required but missing

Debug>test -d
the required argument for option '--dummy' is missing

Debug>test -d 1
1

Debug>test -d 1 asas
1

现在,前三次运行符合预期。但是,为什么第三次运行没有抛出任何异常? 'asas'不匹配任何选项,-d不接受矢量。我究竟做错了什么?或者图书馆是这样设计的?

1 个答案:

答案 0 :(得分:1)

  1. 没有前面破折号的标记称为位置参数
  2. 你应该明确禁止预期行为的位置
  3. 执行此操作,制作空位置列表并将其提供给解析器 https://stackoverflow.com/a/3859400/670719