On Wed, Jul 16, 2008 at 11:30:46AM -0400, Christian Henning wrote:
Hi there, can I use push_back_a with std::vectorstd::string? I want
something like this:
std::vector< std::string > lines;
rule<> l_entry = blanks_p >> *print_p[push_back_a( lines )] >>
blanks_p >> eol_p;
Since your rule probably returns an iterator pair, you need to create
the std::string first. To this end, you can leverage phoenix to create a
lazy functor [1], e.g.
struct push_back_impl
{
template
struct result
{
typedef void type;
};
template
void operator()(Container& c, Item const& item) const
{
c.push_back(item);
}
};
function const push_back = push_back_impl();
Thereafter, you can use the functor as follows:
*print_p[push_back(var(lines), construct_std::string(arg1, arg2))]
Another option would be to create a rule that returns a std::string and
instead of a char_t iterator pair. In this case, you have to change the
scanner context. Unfortunately, I have not yet experimented with this
option, but I assume it's a more convenient solution than the one above.
Matthias
[1] http://www.boost.org/doc/libs/1_35_0/libs/spirit/doc/phoenix.html
--
Matthias Vallentin vallentin@icsi.berkeley.edu
http://matthias.vallentin.cc pgp: 0x37F34C16