Peut stimuler :: program_options Utiliser un délimiteur autre que « - »?
-
04-10-2019 - |
Question
J'utilise boost :: program_options comme ceci:
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 je passe le paramètre de ligne de commande -I hithere
cela fonctionne, mais je passe boost /I hithere
jette un boost::bad_any_cast
avec un what()
de "conversion a échoué en utilisant boost :: any_cast".
Est-il possible d'utiliser program_options pour analyser soit /
-delimitted ou -
-delimitted options? Question bonus, il peut être configuré de telle sorte que /
et -
définir la même option, mais sont opposés binaires de l'autre? Par exemple, /verbose
pourrait signifier une journalisation tout -verbose
pourrait signifier moins verbeux exploitation forestière.
La solution
Pour utiliser /
et -
, la méthode d'utilisation de command_line_parser
style()
avec la combinaison appropriée de les drapeaux de style_t. Par exemple:
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
permet /
démarrer une option longue.)
Vous pourriez probablement faire les contraires /
et -
en ajoutant votre analyseur supplémentaire ; cependant, ce serait très nonstandard et donc potentiellement source de confusion pour les utilisateurs finaux, donc je ne suis pas sûr que ce soit une bonne idée.