Subject: Re: [boost] [proto] lazy functions in custom domains
From: Dean Michael Berris (mikhailberis_at_[hidden])
Date: 2009-02-23 06:52:15
On Mon, Feb 23, 2009 at 7:43 PM, Eric Niebler <eric_at_[hidden]> wrote:
> Dean Michael Berris wrote:
>> Hi Guys,
>> I've recently tried to play around with Boost.Proto and I think I've
>> run into a wall. I was trying to figure this (relatively simple) case
>> out for a while already but it I'm at my wits end not seeing why the
>> implementation doesn't work.
>> I'm pasting the contents of the file (unmodified) which I've tried to
>> follow from the Getting Started document. I was trying to get the
>> custom domain approach working, but I never seem to get the lazy
>> function to be called.
> Hi Dean,
> You were /so/ close to getting this to work, but you would have had to read
> more than the Getting Started guide. There is really only one error in your
Yup, I really should read more of the documentation in a room where I
can focus 100%. ;-)
> You create an expression extension with the BOOST_PROTO_EXTENDS() macro, and
> then also define an operator() overload. BOOST_PROTO_EXTENDS() defines
> operator() for you (check the docs) and the generated one is being preferred
> to yours because it is a non-const member function. You should use
> BOOST_PROTO_BASIC_EXTENDS() instead. Using proto::extends<> also would have
> saved you this trouble.
Ah, that makes sense. :-)
> There's one other minor issue: you're creating an expression with
> proto::make_expr() but not specifying the domain. That's ok in this case
> because Proto deduces your domain correctly, but in some cases it can't so
> you should specify the domain.
> The fixed code is below:
> Hope this helps,
Oh my, that was quick. Thanks Eric, it does work!
Now on to fleshing out that DSEL... ;-)
-- Dean Michael Berris | Software Engineer, Friendster, Inc. blog.cplusplus-soup.com | twitter.com/mikhailberis | linkedin.com/in/mikhailberis | profiles.friendster.com/mikhailberis | deanberris.com