2010-05-26 13 views
6

estoy usando impulso :: program_options así:Puede impulsar :: program_options ¿Utiliza un delimitador distinto de "-"?

namespace po = boost::program_options; 
po::options_description desc("Options"); 
desc.add_options() 
    ("help,?", "Show Options") 
    ("capture-file,I", po::value<string>(), "Capture File") 
    ("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format") 
    ("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File"); 

po::variables_map vm; 
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm); 

Si paso el parámetro de línea de comandos -I hithere funciona, pero yo paso /I hithere impulso lanza una boost::bad_any_cast con un what() de "Error de conversión usando impulso :: any_cast ".

¿Es posible usar las opciones del programa para analizar / -limpiado o - -delimitado? Pregunta extra, ¿puede configurarse para que / y - configuren la misma opción, pero son opuestos binarios el uno del otro? Por ejemplo, /verbose podría significar un registro detallado, mientras que -verbose podría significar un registro menos detallado.

Respuesta

9

Para utilizar / y -, utilice style() método command_line_parser 's con la combinación apropiada de style_t banderas. Por ejemplo:

po::store(po::command_line_parser(ac, av) 
    .options(desc) 
    .style(po::command_line_style::default_style 
     | po::command_line_style::case_insensitive 
     | po::command_line_style::allow_slash_for_short 
     | po::command_line_style::allow_long_disguise) 
    /*.positional(pd)*/ 
    .run(), vm); 

(allow_long_disguise deja para / iniciar una opción de largo.)

que probablemente podría hacer / y - opuestos añadiendo su propio additional parser; sin embargo, esto sería muy poco estándar y, por lo tanto, potencialmente confuso para los usuarios finales, por lo que no estoy seguro de que sea una buena idea.

+0

Probablemente tengas razón. ¿Es posible determinar qué delimitador se utilizó después de la llamada a 'store'? –

+0

A menos que esté usando su propio analizador adicional, no lo creo. –

+0

OK, esa fue una pregunta extra de todos modos. :) –

Cuestiones relacionadas