Si vous utilisez l'analyseur de ligne de commande, il existe un moyen de définir différents styles. La solution consisterait donc à n'utiliser que des options longues et à activer le style allow_long_disguise qui permet de spécifier de longues options avec un tiret (c'est-à-dire "-long_option"). Voici un exemple:
#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;
}
}
Il y aura un petit problème avec la sortie de la description que:
$ ./test --h
./test options:
--h Display this message
Et que l'on est difficile de fixer parce que c'est ce qui est utilisé pour former cette sortie: La seule solution à ce problème est de remplacer «-» par «-» dans la chaîne résultante. Par exemple:
#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;
}
}
La meilleure chose que vous pouvez faire est de corriger le code où il imprime vide longue description de l'option et envoyer un patch à l'auteur de la bibliothèque.
Vous souhaitez que le texte d'aide ne désactive que les options courtes? –
Non, je ne veux que des options telles que -v au lieu de --verbose ou en définissant les deux. La spécification de ", v" au lieu de "v" fait l'affaire mais corrige la liste imprimée de la description. – Novikov