
Hi Overmind, Really? Thank you for that tip! That brings me to a few questions (I was just testing it and couldn't get it to work quickly). What is the sink? I think i can just replace that with cout, right? Actually, no, that gets me an compile error "boost/spirit/home/karma/detail/output_iterator.hpp(295) : error C2675: unary '++' : 'std::ostream' does not define this operator or a conversion to a type acceptable to the predefined operator". ok, what i got now is: #include <boost/spirit/include/karma.hpp> namespace bk = boost::spirit::karma; namespace ba = boost::spirit::ascii; vector<string> vsUnrecog = collect_unrecognized(parsed.options,po::exclude_positional); bk::generate(cout, "Option \"" << ba::string % '\" not recognized' << bk::eol, vsUnrecog); Where do those sinks come from and how do I make a simple sink that writes to stdout, just like cout does? By the way, doen't your code both use ";" and newline (eol) as delimiters? Best, Dee On Mon, Aug 24, 2009 at 10:42 AM, OvermindDL1<overminddl1@gmail.com> wrote:
On Sun, Aug 23, 2009 at 8:20 PM, Diederick C. Niehorster<dcnieho@gmail.com> wrote:
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 <boost/spirit/include/karma.hpp> 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 <boost/foreach.hpp> 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> >()); _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users