comment puis-je obtenir les jetons non-drapeau et non-option après boost :: program_options parse ma ligne de commande args

StackOverflow https://stackoverflow.com/questions/1314717

Question

En python, je peux construire mon optparse exemple de telle sorte qu'il filtrera automatiquement les options et les non-option / drapeaux en deux seaux différents:

(options, args) = parser.parse_args()

Avec boost :: program_options, comment puis-je récupérer une liste de jetons qui sont les non-options restantes et des jetons non-drapeau?

par exemple. Si mon programme a des drapeaux

--foo 
--bar BAR

et je passe ensuite dans la ligne de commande:

--foo hey --bar BAR you

comment puis-je obtenir une liste uniquement composée de jetons « hey » et « vous »

Était-ce utile?

La solution

IIRC, vous devez utiliser une combinaison de options cachées . L'idée est de (1) ajouter une option normale et lui donner un nom, peut-être quelque chose comme --positional=ARG, (2) ne comprennent pas cette option dans la description de l'aide, (3) configurer command_line_parser pour traiter tous les arguments de position comme si --positional était spécifié, et (4) récupérer les arguments de position en utilisant vm["positional"].as< std::vector<std::string> >().

Il y a probablement un exemple quelque part dans l'arbre source, mais je ne l'ai pas sur cette machine dès maintenant.

Autres conseils

Voici un exemple:

namespace po = boost::program_options;    
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;

m_cmdLine.add_options()
    (/*stuff*/)
    ("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
                        .options(m_cmdLine)
                        .positional(m_positional)
                        .allow_unregistered()
                        .run();
// store, notify, etc

Ensuite, il suffit obtenir « entrée » des options nommées en tant que vecteur de chaînes et vous êtes tous ensemble.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top