2013-01-02 72 views
16

当您使用Boost库program_options这是很容易打印帮助你的程序:打印帮助

boost::program_options::variables_map options; 
boost::program_options::options_description optionsDesc; 
boost::program_options::positional_options_description positionalOptionsDesc; 
//... 
if(options.count("help")) 
{ 
    cerr << optionsDesc << endl; 
} 

但你如何从positional_options_description添加选项帮助信息?在教程我可以看到这样的建立的输出,在所述部分的末尾:

http://www.boost.org/doc/libs/1_52_0/doc/html/program_options/tutorial.html#id2607297

选项input-file被印刷在帮助和它与位置有关。但我看不到代码。 是否有内置的打印方式,如options_description或者您必须手动进行打印?显然,<<不会为positional_options_description工作,编译错误是:

error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ 
+3

如果有帮助,你可以找到完整的代码[这里](http://www.boost.org/libs/program_options/example/options_description.cpp)。 – 2013-01-02 18:34:05

+0

谢谢llonesmiz,它确实帮了很多!尽管如此,如果将它们添加到'positions_options_description'中,我不必将位置参数添加到'options_description'中,但是您必须将它们添加到两个中。 – nuoritoveri

回答

5

注意,流媒体的描述只打印出的选项。它不打印程序的名称或程序的实际描述。您应该手动打印您有任何位置参数作为输出消息的一部分:

而不是

if (vm.count("help")) { 
    cout << "Usage: options_description [options]\n"; 
    cout << desc; 
    return 0; 
} 

你可以很容易地说

if (vm.count("help")) { 
    cout << "Usage: " << argv[0] << " [options] <description of positional 1> <description of positional 2> ...\n"; 
    cout << desc; 
    return 0; 
} 
+0

正如我在问题的评论中所说的,我没有将位置参数添加到'options_description',而只是添加到'positions_options_description'。这就是为什么它没有打印。它通常是这样,所以你的代码做我想要的,我只是在其他地方犯了错误。我也同意在开始时打印使用是很好的。 – nuoritoveri

1

看一看的boost :: program_options :: locations_options_description.name_for_position(i)

错误信息是不相关的东西,我忘记了与cpp11有什么关系