<div class="gmail_quote">On Mon, Sep 21, 2009 at 10:04 AM, aiooua <span dir="ltr"><<a href="mailto:aiooua@gmail.com">aiooua@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> hello,<br> <br> I recently picked up boost to make use of the various libraries it<br> includes. Unfortunately, I got stuck with the very first one<br> (program_options) I used in my code. Any help would be appreciated<br> very much.<br> <br> I want an option "bunch" which goes along with a bunch of numbers. I<br> thought the following code would do the job:<br> <br> ---------------------------------------------------------------------------------------<br> #include <iostream><br> #include <string><br> #include <vector><br> #include <boost/program_options.hpp><br> <br> using namespace std;<br> namespace po = boost::program_options;<br> <br> int main(int argc, char* argv[])<br> {<br> �try<br> � �{<br> � � �vector<int> numbers;<br> � � �po::options_description params("parameters");<br> � � �po::variables_map options;<br> � � �params.add_options()<br> � � � �("bunch,b", po::value< vector<int> >(&numbers), "a bunch of numbers");<br> � � �po::store(po::parse_command_line(argc, argv, params), options);<br> � � �po::notify(options);<br> � � �if(options.count("bunch")!=0)<br> � � � �{<br> � � � � �copy (numbers.begin(), numbers.end(),<br> std::ostream_iterator<int>(cout, "\n"));<br> � � � �}<br> � �}<br> �catch(exception & e)<br> � �{<br> � � �cerr << e.what() << endl;<br> � �}<br> �return 0;<br> };<br> ---------------------------------------------------------------------------------------<br> <br> However, it doesn't seem to work as it should. When I run this as follows:<br> <br> ---------------------------------------------------------------------------------------<br> > test --bunch 4 2 42<br> 4<br> ---------------------------------------------------------------------------------------<br> <br> It is just printing the first value - Am I doing something wrong here?<br> I'm using 'boost_1_40_0' which I compiled using MS Visual Studio 2005.<br> <br> thanks,<br> _______________________________________________<br> Boost-users mailing list<br> <a href="mailto:Boost-users@lists.boost.org">Boost-users@lists.boost.org</a><br> <a href="http://lists.boost.org/mailman/listinfo.cgi/boost-users" target="_blank">http://lists.boost.org/mailman/listinfo.cgi/boost-users</a><br> </blockquote></div><br>You have to use the multitoken() function - here is a short example (which should DEFINITELY be included on the documentation page). Unfortunately, the multitoken list has to appear at the end of the argument list (i.e. you cannot have "--param1 something --NumberList 1 2 3 4 --param3 something_else", instead you must have "--param1 something --param3 something_else --NumberList 1 2 3 4") because the multitoken argument will just keep eating the arguments until it gets to the very end!).<br> <br>#include <iostream><br>#include <vector><br>#include <cstdlib><br><br>#include <cmath><br>#include <boost/program_options.hpp><br><br>namespace po = boost::program_options;<br>��� ��� <br> int main(int argc, char* argv[])<br>{<br>��� ��� ��� <br>��� po::options_description desc("Allowed options");<br>��� desc.add_options()<br>��� ��� ��� ("help", "produce help message")<br>��� ��� ��� ("NumberList,N", po::value<std::vector<int> >()->multitoken(), "List of numbers.")//lets you use --NumberList or -N<br> ��� ;<br><br>��� po::variables_map vm;<br>��� po::store(po::parse_command_line(argc, argv, desc), vm);<br>��� po::notify(vm); //assign the variables (if they were specified)<br>��� <br>��� if(vm.count("help")) <br> ��� {<br>��� ��� std::cout << desc << std::endl;;<br>��� ��� return 1;<br>��� }<br>��� ��� <br>��� if (vm.count("NumberList")) <br>��� {<br>��� ��� std::cout << "count: " << vm.count("NumberList") << std::endl;<br> ��� ��� std::vector<int> NumberList = vm["NumberList"].as<std::vector<int> >();<br>��� ��� std::cout << "NumberList is length " << NumberList.size() << std::endl;<br> ��� ��� for(unsigned int i = 0; i < NumberList.size(); i++)<br>��� ��� ��� std::cout << NumberList[i] << std::endl;<br>��� } <br>��� else <br>��� {<br>��� ��� std::cout << "NumberList was not set." << std::endl;<br> ��� }<br><br>��� return 0;<br>}<br><br>I hope this answers your question.<br> <br clear="all">Thanks,<br><br>David<br> <br>