boost program_options:帮助与有意义的选项

时间:2011-11-15 14:54:45

标签: c++ boost command-line-arguments boost-program-options

是否有一种简单的方法可以将帮助选项与“真正的”程序选项分开?事实上,是否可以定义选项的层次结构,即BNF:

options := help_options | program_options
help_options := '-h'
program_options := '-m1' mode1options | '-m2' mode2options
mode1options := number
...

或者有更好的方法来实现这一目标吗?我应该恢复精神吗?

1 个答案:

答案 0 :(得分:7)

该文档介绍了如何在Option Groups and Hidden Options标题下分隔选项。它演示了如何定义多个options_description对象,然后使用all组来解析命令行,但是visible组用于显示文档:

// Declare an options description instance which will include
// all the options
options_description all("Allowed options");
all.add(general).add(gui).add(backend);

// Declare an options description instance which will be shown
// to the user
options_description visible("Allowed options");
visible.add(general).add(gui);

variables_map vm;
store(parse_command_line(ac, av, all), vm);

if (vm.count("help")) 
{
    cout << visible;
    return 0;
}

虽然Program_options库允许您自定义某些语法(请参阅Non-conventional SyntaxCustom Validators),但它不提供定义自定义语法的方法。如果要定义命令行的语法,请使用其他工具。