2013-05-14 41 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 ...没关系。不知道我怎么错过了你不想要这个解决方案的事实。