On Monday, April 25, 2011 06:39:14 PM Christophe Henry wrote:
> Hi Thomas,
> 
> Sorry to come back to the subject so late, I didn't manage before :(
> 
> > If you want to use it as a transform you need the evaluator with an
> > appropriate action that does the desired transform... here is an
> > example:
> >
> > struct BuildEventPlusGuard
> >  : proto::when<
> >  proto::subscript<proto::terminal<event_tag>,
> > phoenix::meta_grammar >,
> >  TempRow<none,proto::_left,none,none,
> > phoenix::evaluator(proto::_right, some_cool_action())>()
> >  >
> > {};
> >
> > Now, some_cool_action can do the transform that BuildGuards was doing.
> 
> Hmmm, I get a compiler error, which was expected (would be too easy
> otherwise ;- ) ), but the error is surprising. The error is that
> phoenix::evaluator seems to believe some_cool_action should be a
> random access fusion sequence (expects an environment?).

You are right ... slippery on my side ... evaluator expects a context, which is 
a tuple containing the environment and the actions: http://goo.gl/24fU9

> Anyway, I am hoping not to write any cool transform but simply save
> the type of the phoenix expression so that I can re-create an actor
> later. If I need to rewrite differently what BuildGuards was doing, I
> gain little. I would like phoenix to do the grammar parsing and
> building of actor.

It does ... just pass on proto::_right and it should be good:

struct BuildEventPlusGuard
  : proto::when<
        proto::subscript<
            proto::terminal<event_tag>
          , phoenix::meta_grammar      // match the phoenix actor
        >
      , TempRow<
            none
          , proto::_left
          , none
          , none
          , proto::_right // Pass the type along. which is a phoenix actor.
        >(proto::_right)  // Pass the object along. Which is the actor (1)
    >
{};

(1): Here you can work around the thing with the possibly uninitialized stuff. 
Just copy the phoenix actor (should be cheap, if not optimized away completely).

> Thanks,
> Christophe
_______________________________________________
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto

Reply via email to