Si ma ligne de commande est:peut augmenter Program_options arguments séparés par des virgules pour séparer les valeurs
> prog --mylist=a,b,c
peut program_options de Boost être configuré pour voir trois valeurs d'arguments distincts pour l'argument mylist
? J'ai configuré program_options comme:
namespace po = boost::program_options;
po::options_description opts("blah")
opts.add_options()
("mylist", std::vector<std::string>>()->multitoken, "description");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, opts), vm);
po::notify(vm);
Quand je vérifie la valeur de l'argument mylist
, je vois une valeur a,b,c
. J'aimerais voir trois valeurs distinctes, séparées par des virgules. Cela fonctionne bien si je spécifie la ligne de commande:
> prog --mylist=a b c
ou
> prog --mylist=a --mylist=b --mylist=c
est-il un moyen de configurer program_options afin qu'il voit a,b,c
que trois valeurs qui doivent chacun être insérés dans le vecteur, plutôt qu'un? J'utilise boost 1.41, g ++ 4.5.0 20100520, et j'ai activé les extensions expérimentales C++ 0x.
EDIT:
Les travaux de solution acceptée mais finit par être plus compliqué, l'OMI, que seulement itérer un vecteur et diviser les valeurs manuellement. À la fin, j'ai pris la suggestion de James McNellis et l'ai mise en place de cette façon. Sa solution n'a pas été soumise comme réponse, cependant, j'ai donc accepté l'autre solution correcte de hkaiser. Les deux ont fonctionné, mais la segmentation manuelle est plus claire.
Si rien d'autre, vous pouvez utiliser 'boost :: tokenizer' pour marquer les valeurs séparées par des virgules. –
C'est probablement la chose la plus facile à faire. Juste post-traiter l'argument et gérer le cas où une virgule apparaît. –