如何使升级程序选项忽略某些输入以由另一个解释器处理?

时间:2014-10-21 14:51:05

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

我想在我正在编写的程序中使用boost程序选项。该程序还使用CORBA,它旨在接受特定于CORBA的命令行输入。我想使boost程序选项忽略这些与CORBA相关的命令行输入,只处理其他命令行输入。我怎么能做到这一点?

作为示例,给出以下命令行:

./myprogram -ORBInitRef NameService=corbaloc:iiop:localhost:1234/NameService --myBoostOptionFoo 1 --myBoostOptionBar trololo

如何制作提升程序选项只处理myBoostOptionFoo和myBoostOptionBar?

所有CORBA命令行输入都以“-ORBxxxxxx”开头,所以这应该有助于过滤,但我完全不知道是否有一个简单的方法来实现这一点,因为boost :: PO会抱怨命令行选项,它不明白。

1 个答案:

答案 0 :(得分:0)

直接来自Allowing Unknown Options的文档:

  

通常,库会对未知选项名称抛出异常。这个   行为可以改变。例如,只有你的一部分   应用程序使用Program_options,您希望传递无法识别   选项到程序的另一部分,甚至是另一部分   应用

     

要在命令行上允许未注册的选项,您需要使用   用于解析的basic_command_line_parser类(不是parse_command_line)   并调用该类的allow_unregistered method

parsed_options parsed = command_line_parser(argc, argv).options(desc).allow_unregistered().run();      
  

对于看起来像一个选项但没有已知的每个令牌   name,basic_option的一个实例将被添加到结果中。该   实例的string_key和值字段将包含结果   语法的句法解析,未注册的字段将被设置为   true,而original_tokens字段将包含令牌   出现在命令行上。

     

如果你想进一步传递无法识别的选项,那么   可以使用collect_unrecognized函数。该功能将收集   所有未识别值的原始令牌,以及可选的所有已找到的值   位置选择。比方说,如果您的代码处理了一些选项,但确实如此   根本不处理位置选项,你可以使用像这样的功能   这样:

vector<string> to_pass_further = collect_unrecognized(parsed.options,
include_positional);