如何在boost :: program_options解析命令行参数后获取非标记和非选项标记

时间:2009-08-22 00:00:58

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

在python中,我可以构造我的optparse实例,以便它自动将选项和非选项/标志过滤到两个不同的桶中:

(options, args) = parser.parse_args()

使用boost :: program_options,如何检索作为剩余非选项和非标记标记的标记列表?

e.g。如果我的程序有标志

--foo 
--bar BAR

然后我传入命令行:

--foo hey --bar BAR you

如何才能获得仅包含令牌“嘿”和“你”的列表

2 个答案:

答案 0 :(得分:4)

以下是一个例子:

namespace po = boost::program_options;    
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;

m_cmdLine.add_options()
    (/*stuff*/)
    ("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
                        .options(m_cmdLine)
                        .positional(m_positional)
                        .allow_unregistered()
                        .run();
// store, notify, etc

然后只需将“输入”命名选项作为字符串向量,就可以了。

答案 1 :(得分:2)

IIRC,您必须使用positional_options_descriptionhidden options的组合。这个想法是(1)添加一个正常的选项并给它一个名字,可能像--positional=ARG,(2)在帮助描述中不包括该选项,(3)配置command_line_parser到将所有位置参数视为指定--positional,以及(4)使用vm["positional"].as< std::vector<std::string> >()检索位置参数。

源代码树中可能有一个例子,但我现在没有在这台机器上。