On Sun, Aug 23, 2009 at 8:20 PM, Diederick C.
Niehorster
The same way that you would stream any normal vector: vector<string> &files = vm["file"].as< vector<string> >(); vector<string>::const_iterator iter = files.begin(); cout << "Files selected: "; for(;iter!=files.end();++iter) { cout << *iter << ";"; } cout << "\n";
Consequently, if you have Boost trunk installed, then you could do this as well since it does support streaming vectors: #include
using namespace boost::spirit::karma; using namespace boost::spirit::ascii; generate(cout, "Files selected: " << (*char_)%';' << eol, vm["file"].as< vector<string> >());
Or you could simply do: #include
cout << "Files selected: "; BOOST_FOREACH(string& sFile, vm["file"].as< vector<string> >()) cout << sFile.c_str() << endl;
That is assuming you wanted an endl at the end of each name, a usual delimiter is something like ';' or so, so this instead: cout << "Files selected: "; BOOST_FOREACH(string& sFile, vm["file"].as< vector<string> >()) cout << sFile.c_str() << ";"; cout << "\n"; Although the karma version that Hartmut posted is still the fastest way to do it (in terms of execution speed): generate(sink, "Files selected: " << string % ';' << eol, vm["file"].as< vector<string> >());