2013-05-14 4 views
5

Ich bin mit Boost-:: Program_options meine Kommandozeile zu analysieren und einen Code aus dem Tutorial wie folgt angepasst:Kein Standardverhalten der Argumente mit 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; 
} 

Ich benötige Hilfe zeigen, wenn keine Argumente übergeben werden, aber ich habe keine gefunden Möglichkeit, die Gesamtzahl der Argumente variables_map zu erhalten, ohne Argc zu verwenden.

Antwort

4

argc ist der weg hier zu gehen, program_options nicht offen legen, wie viele Optionen gesetzt wurden. Übertreiben Sie nicht.

+0

Sie haben Recht, das ist über Engineering – kittikun

9

Ich habe

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

seit argc immer zumindest den Namen des Programms enthält, ist es ohne Argumente ausgeführt wird Hilfe angezeigt werden soll.

doh ... vergiss. Ich bin mir nicht sicher, wie ich die Tatsache vermisst habe, dass Sie diese Lösung speziell nicht wollten.