2013-01-02 105 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有什麼關係