<div class="gmail_quote">On Mon, Sep 21, 2009 at 10:04 AM, aiooua <span dir="ltr">&lt;<a href="mailto:aiooua@gmail.com">aiooua@gmail.com</a>&gt;</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 &quot;bunch&quot; which goes along with a bunch of numbers. I<br>
thought the following code would do the job:<br>
<br>
---------------------------------------------------------------------------------------<br>
#include &lt;iostream&gt;<br>
#include &lt;string&gt;<br>
#include &lt;vector&gt;<br>
#include &lt;boost/program_options.hpp&gt;<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&lt;int&gt; numbers;<br>
 � � �po::options_description params(&quot;parameters&quot;);<br>
 � � �po::variables_map options;<br>
 � � �params.add_options()<br>
 � � � �(&quot;bunch,b&quot;, po::value&lt; vector&lt;int&gt; &gt;(&amp;numbers), &quot;a bunch of numbers&quot;);<br>
 � � �po::store(po::parse_command_line(argc, argv, params), options);<br>
 � � �po::notify(options);<br>
 � � �if(options.count(&quot;bunch&quot;)!=0)<br>
 � � � �{<br>
 � � � � �copy (numbers.begin(), numbers.end(),<br>
std::ostream_iterator&lt;int&gt;(cout, &quot;\n&quot;));<br>
 � � � �}<br>
 � �}<br>
 �catch(exception &amp; e)<br>
 � �{<br>
 � � �cerr &lt;&lt; e.what() &lt;&lt; endl;<br>
 � �}<br>
 �return 0;<br>
};<br>
---------------------------------------------------------------------------------------<br>
<br>
However, it doesn&#39;t seem to work as it should. When I run this as follows:<br>
<br>
---------------------------------------------------------------------------------------<br>
&gt; 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&#39;m using &#39;boost_1_40_0&#39; 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 &quot;--param1 something --NumberList 1 2 3 4 --param3 something_else&quot;, instead you must have &quot;--param1 something --param3 something_else --NumberList 1 2 3 4&quot;) because the multitoken argument will just keep eating the arguments until it gets to the very end!).<br>
<br>#include &lt;iostream&gt;<br>#include &lt;vector&gt;<br>#include &lt;cstdlib&gt;<br><br>#include &lt;cmath&gt;<br>#include &lt;boost/program_options.hpp&gt;<br><br>namespace po = boost::program_options;<br>��� ��� <br>
int main(int argc, char* argv[])<br>{<br>��� ��� ��� <br>��� po::options_description desc(&quot;Allowed options&quot;);<br>��� desc.add_options()<br>��� ��� ��� (&quot;help&quot;, &quot;produce help message&quot;)<br>��� ��� ��� (&quot;NumberList,N&quot;, po::value&lt;std::vector&lt;int&gt; &gt;()-&gt;multitoken(), &quot;List of numbers.&quot;)//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(&quot;help&quot;)) <br>
��� {<br>��� ��� std::cout &lt;&lt; desc &lt;&lt; std::endl;;<br>��� ��� return 1;<br>��� }<br>��� ��� <br>��� if (vm.count(&quot;NumberList&quot;)) <br>��� {<br>��� ��� std::cout &lt;&lt; &quot;count: &quot; &lt;&lt; vm.count(&quot;NumberList&quot;) &lt;&lt; std::endl;<br>
��� ��� std::vector&lt;int&gt; NumberList = vm[&quot;NumberList&quot;].as&lt;std::vector&lt;int&gt; &gt;();<br>��� ��� std::cout &lt;&lt; &quot;NumberList is length &quot; &lt;&lt; NumberList.size() &lt;&lt; std::endl;<br>
��� ��� for(unsigned int i = 0; i &lt; NumberList.size(); i++)<br>��� ��� ��� std::cout &lt;&lt; NumberList[i] &lt;&lt; std::endl;<br>��� } <br>��� else <br>��� {<br>��� ��� std::cout &lt;&lt; &quot;NumberList was not set.&quot; &lt;&lt; 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>