Si está utilizando el analizador de línea de comandos, hay una manera de establecer diferentes estilos. Por lo tanto, la solución sería usar solo opciones largas y habilitar el estilo allow_long_disguise, que permite especificar opciones largas con un solo guión (es decir, "-long_option"). He aquí un ejemplo:
#include <iostream>
#include <boost/program_options.hpp>
namespace options = boost::program_options;
using namespace std;
int
main (int argc, char *argv[])
{
options::options_description desc (string (argv[0]).append(" options"));
desc.add_options()
("h", "Display this message")
;
options::variables_map args;
options::store (options::command_line_parser (argc, argv).options (desc)
.style (options::command_line_style::default_style |
options::command_line_style::allow_long_disguise)
.run(), args);
options::notify (args);
if (args.count ("h"))
{
cout << desc << endl;
return 0;
}
}
Habrá un pequeño problema con la salida Descripción embargo:
$ ./test --h
./test options:
--h Display this message
Y que uno es difícil de solucionar, porque esto es lo que se utiliza para formar esta salida:
std::string
option_description::format_name() const
{
if (!m_short_name.empty())
return string(m_short_name).append(" [ --").
append(m_long_name).append(" ]");
else
return string("--").append(m_long_name);
}
La única solución para esto que viene a la mente es reemplazar "-" con "-" en la cadena resultante. Por ejemplo:
#include <iostream>
#include <sstream>
#include <boost/program_options.hpp>
#include <boost/algorithm/string/replace.hpp>
namespace options = boost::program_options;
using namespace std;
int
main (int argc, char *argv[])
{
options::options_description desc (string (argv[0]).append(" options"));
desc.add_options()
("h", "Display this message")
;
options::variables_map args;
options::store (options::command_line_parser (argc, argv).options (desc)
.style (options::command_line_style::default_style |
options::command_line_style::allow_long_disguise)
.run(), args);
options::notify (args);
if (args.count ("h"))
{
std::stringstream stream;
stream << desc;
string helpMsg = stream.str();
boost::algorithm::replace_all (helpMsg, "--", "-");
cout << helpMsg << endl;
return 0;
}
}
Lo mejor que puede hacer es fijar el código donde se imprime vacío descripción de la opción de largo y enviar un parche para el autor de la biblioteca.
¿Desea que el texto de ayuda deshabilite solamente las opciones abreviadas? –
No, solo deseo opciones como -v en lugar de --verbose o definir ambas. Especificar ", v" en lugar de "v" hace el truco, pero revoca la lista de impresión de la descripción. – Novikov