我想在我正在编写的程序中使用boost程序选项。该程序还使用CORBA,它旨在接受特定于CORBA的命令行输入。我想使boost程序选项忽略这些与CORBA相关的命令行输入,只处理其他命令行输入。我怎么能做到这一点?
作为示例,给出以下命令行:
./myprogram -ORBInitRef NameService=corbaloc:iiop:localhost:1234/NameService --myBoostOptionFoo 1 --myBoostOptionBar trololo
如何制作提升程序选项只处理myBoostOptionFoo和myBoostOptionBar?
所有CORBA命令行输入都以“-ORBxxxxxx”开头,所以这应该有助于过滤,但我完全不知道是否有一个简单的方法来实现这一点,因为boost :: PO会抱怨命令行选项,它不明白。
答案 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);