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

StackOverflow https://stackoverflow.com/questions/1314717

在Python中,我可以构建我的 优化分析 实例,这样它会自动将选项和非选项/标志过滤到两个不同的桶中:

(options, args) = parser.parse_args()

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

例如如果我的程序有标志

--foo 
--bar BAR

然后我传入命令行:

--foo hey --bar BAR you

我如何获得仅由标记“嘿”和“你”组成的列表

有帮助吗?

解决方案

IIRC,你必须结合使用 positional_options_description隐藏选项. 。这个想法是(1)添加一个普通选项并给它一个名称,也许类似于 --positional=ARG, ,(2) 不要在帮助说明中包含该选项,(3) 配置 command_line_parser 将所有位置参数视为 --positional 被指定,并且(4)使用检索位置参数 vm["positional"].as< std::vector<std::string> >().

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

其他提示

下面是一个例子:

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

然后就得到“输入”命名选项字符串的载体,你都设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top