2013-05-14 13 views
5

Sto usando Boost :: Program_options per analizzare la mia linea di comando e adattato po 'di codice dal tutorial come segue:Nessun comportamento predefinito degli argomenti con 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; 
} 

mi piacerebbe mostrare aiuto quando vengono passati argomenti ma non ho trovato un modo per ottenere il numero totale di argomenti variables_map senza fare affidamento su argc.

risposta

4

argc è il modo per andare qui, program_options non espone quante opzioni sono state impostate. Non sovrastimolare.

+0

Hai ragione, questo è oltre l'ingegneria – kittikun

9

Ho usato

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

dal argc sempre almeno contiene il nome del programma, eseguirlo senza argomenti visualizzerà aiuto.

doh ... non importa. Non sono sicuro di come mi sia mancato il fatto che tu non volessi questa soluzione.