49 votes

Arguments vectoriels dans les options du programme Boost

J'ai deux questions liées :

  1. Quelle est la manière la plus simple de permettre le passage d'une série de valeurs, en utilisant les options du programme Boost ? Mon objectif est d'éviter prog --opt 1 --opt 2 --opt 3 et d'avoir prog --opt 1 2 3 place.

  2. Quelle est la manière la plus simple d'avoir une option qui prend exactement deux nombres, par exemple prog --opt 137 42 ?

(Je n'ai pas besoin de paramètres de programme "gratuits".)

45voto

Bee Points 1539

C'est une réponse tardive mais j'espère que cela aidera quelqu'un. Vous pouvez facilement utiliser la même technique dans l'élément 1, sauf que vous devez ajouter une autre validation sur le nombre d'éléments dans votre vecteur :

de l'exemple de rcollyer :

 namespace po = boost::program_options;
po::option_descriptions desc("");

desc.add_options()
 ("opt", po::value<std::vector<int> >()->multitoken(), "description");

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm); 

vector<int> opts;
if (!vm["opt"].empty() && (opts = vm["opt"].as<vector<int> >()).size() == 2) {
  // good to go
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X