2012-04-17 84 views
15

我想爲我的一些命令行參數使用默認值。如何告訴program_options默認選項是什麼,如果用戶不提供參數,如何告訴我的程序使用默認值如何使用boost程序選項獲取默認參數值?

說我想有一個參數指定的機器人數量,以在兇惡的狂暴行爲與發送3.

robotkill --robots 5默認值會產生5 robots have begun the silicon revolution,而 robotkill(不提供的參數)將產生3 robots have begun the silicon revolution

+1

這個問題的解決方案不能簡單,但我找不到它在任何地方記錄,所以我提出了這個問題。 – flies 2012-04-17 16:27:58

+0

相關:如何判斷用戶是否提供了具有默認值的選項http://stackoverflow.com/questions/9200598/boost-program-options-with-default-values-always-present-when-using -vm-count('count'不起作用,顯然是因爲即使沒有提供該選項,變量映射也會分配默認值,所以count不會爲零) – flies 2012-04-17 16:32:44

+1

http://www.boost.org/doc/ libs/1_65_1/doc/html/boost/program_options/typed_value.html#idp698602832-bb用於技術說明和http://www.boost.org/doc/libs/1_65_0/doc/html/program_options/tutorial.html# idp419580960的相關教程說明。無可否認,在使用你的答案尋找正確的名字後,我不得不尋找那些人。 – patrickvacek 2017-10-18 11:59:06

回答

18

program_options當用戶不提供這些選項時,會自動爲選項分配默認值。您甚至不需要檢查用戶是否提供了給定的選項,只是在這兩種情況下都使用相同的分配。

#include <iostream> 
#include <boost/program_options.hpp> 

namespace po = boost::program_options; 

int main (int argc, char* argv[]) { 

    po::options_description desc("Usage"); 
    desc.add_options() 
    ("robots", po::value<int>()->default_value(3), 
    "How many robots do you want to send on a murderous rampage?"); 

    po::variables_map opts; 
    po::store(po::parse_command_line(argc, argv, desc), opts); 

    try { 
    po::notify(opts); 
    } catch (std::exception& e) { 
    std::cerr << "Error: " << e.what() << "\n"; 
    return 1; 
    } 

    int nRobots = opts["robots"].as<int>(); 
    // automatically assigns default when option not supplied by user!! 

    std::cout << nRobots << " robots have begun the silicon revolution" 
     << std::endl; 
    return 0; 
}