2013-05-14 39 views
5

我使用boost :: Program_options來分析我的命令行和改編自本教程一些代碼如下:Boost.Program_options沒有參數默認行爲?

try { 
    po::options_description desc("Allowed options"); 

    desc.add_options() 
     ("help,h", "output help message") 
     ("width,w", po::value<int>()->required(), " width") 
    ; 

    po::positional_options_description p; 
    p.add("width", 1); 

    po::variables_map vm; 
    po::store(po::command_line_parser(argc, argv). 
       options(desc).positional(p).run(), vm); 

    if (vm.count("help")) { 
     std::cout << "USAGE: " << av[0] << &p << std::endl; 
     return 0; 
    } 

    po::notify(vm); 

    if (vm.count("width")) { 
     std::cout << "width: " << vm["width"].as<int>() << "\n"; 
    } 
} catch (std::exception& e) { 
    std::cout << e.what() << std::endl; 
    return 1; 
} catch (...) { 
    std::cout << "Exception of unknown type!" << std::endl; 
} 

我想顯示幫助時,沒有傳遞參數,但我沒發現不依賴於argc而獲得參數變量總數的方法。

回答

4

argc是要走到這裏的路,program_options不會公開多少個選項。不要過度工程師。

+0

你說得對,這是結束工程 – kittikun

9

我用

if (vm.count("help") || argc == 1) { 

以來的argc總是至少包含程序的名稱,不帶參數運行,則顯示幫助。

doh ...沒關係。不知道我怎麼錯過了你不想要這個解決方案的事實。