Boost logo

Boost Users :

Subject: Re: [Boost-users] commandline args
From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2009-08-24 08:50:04


> Yup, now it works.

Good.

> For reference, I got rid of the duplicated bk::eol also by using the
> folloing code:
>
> bk::generate(ostream_iterator<char>(cout),
> "Command line options not recognized:\n" <<
> (" \"" << ba::string << '"' << bk::eol) % "",
> vsTest);

If you don't need any separators in between the list items you could write:

bk::generate(ostream_iterator<char>(cout),
    "Command line options not recognized:\n" <<
    *(" \"" << ba::string << '"') << bk::eol,
    vsTests);

(which is the equivalent of a Kleene Star).

BTW, Karma has a different API allowing to directly integrate the code above with output streams:

    cout << karma::format(
                *(" \"" << ascii::string << '"') << eol
              , vsTest
            );

where format is a std::stream manipulator.

Regards Hartmut

>
> Not putting an empty char array after the modulus operator would be
> invalid C++ and is thus required.
>
> Thanks again,
> Best,
> Diederick
>
> On Mon, Aug 24, 2009 at 1:45 PM, Diederick C.
> Niehorster<dcnieho_at_[hidden]> wrote:
> > Dear OvermindDL1,
> >
> > That solves the issue then, I'm using Boost 1.39 ;)
> >
> > Let me try trunk, all should work fine then. I have seen the other
> > thread in which the location of sprit v2.1's doc were disclosed,
> > however i didn't connect those threads for some reason.
> >
> > Thanks again!
> >
> > Best,
> > Diederick
> >
> > On Mon, Aug 24, 2009 at 1:36 PM, OvermindDL1<overminddl1_at_[hidden]>
> wrote:
> >> On Sun, Aug 23, 2009 at 11:20 PM, Diederick C.
> >> Niehorster<dcnieho_at_[hidden]> wrote:
> >>> That also gave me compilation errors:
> >>>
> >>> ..\Dependency\boost\boost/spirit/home/karma/generate.hpp(72) :
> error
> >>> C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1
> >>> from 'boost::mpl::failed ************(__thiscall
> >>> boost::spirit::karma::generate::error_invalid_expression::*
> >>> ***********)(Expr)' to 'boost::mpl::assert<false>::type'
> >>>
> >>> ..\Dependency\boost\boost/spirit/home/karma/generate.hpp(76) :
> error
> >>> C2039: 'generate' : is not a member of
> >>> 'boost::proto::exprns_::expr<Tag,Args,Arity>'
> >>>
> >>> Below, please find a minimal example.
> >>> Thank you for your continued help!
> >>>
> >>> Best,
> >>> Dee
> >>>
> >>> ---
> >>> #include <vector>
> >>> #include <string>
> >>> #include <iostream>
> >>> using namespace std;
> >>> #include <boost/spirit/include/karma.hpp>
> >>> namespace bk = boost::spirit::karma;
> >>> namespace ba = boost::spirit::ascii;
> >>>
> >>>
> >>> int main()
> >>> {
> >>> vector<string> vsTest;
> >>> vsTest.push_back("test");
> >>> vsTest.push_back("t2");
> >>> vsTest.push_back("t3");
> >>>
> >>>
> >>> bk::generate(ostream_iterator<char>(cout),
> >>> "Command line options not recognized:\n" <<
> >>> (" \"" << ba::string % ("\"" << bk::eol)) << "\"" <<
> bk::eol,
> >>> vsTest);
> >>>
> >>>
> >>> bk::generate(ostream_iterator<char>(cout),
> >>> "Command line options not recognized:\n" <<
> >>> ('\"' << ba::string << '\"') % bk::eol << bk::eol,
> >>> vsTest);
> >>>
> >>> return 0;
> >>> }
> >>> ---
> >>>
> >>
> >> This is what I get when I compile with your test:
> >> 1>------ Build started: Project: pure_testing, Configuration:
> Release
> >> Win32 ------
> >> 1>Compiling...
> >> 1>main.cpp
> >> 1>using native typeof
> >> 1>Linking...
> >> 1>Generating code
> >> 1>Finished generating code
> >> 1>Embedding manifest...
> >> 1>Build Time 0:27
> >> 1>Build log was saved at
> >> "file://r:\Programming_Projects\pure_testing\Release\BuildLog.htm"
> >> 1>pure_testing - 0 error(s), 0 warning(s)
> >> ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped
> ==========
> >>
> >> Looks like it works perfect to me. You are using Boost Trunk like I
> >> stated in my first post in this thread, right?
> >>
> >> You should still use this grammar though, it is the best:
> >> bk::generate(ostream_iterator<char>(cout),
> >> "Command line options not recognized:\n" <<
> >> (" \"" << ba::string << '\"') % bk::eol
> >> ,vsTest);
> >> And yes, I confirmed it compiles and runs as you want.
> >> _______________________________________________
> >> Boost-users mailing list
> >> Boost-users_at_[hidden]
> >> http://lists.boost.org/mailman/listinfo.cgi/boost-users
> >>
> >
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net