Boost logo

Boost Users :

Subject: Re: [Boost-users] proto: BOOST_PROTO_AUTO
From: Kim Kuen Tang (kuentang_at_[hidden])
Date: 2009-01-05 20:16:26


Hi Eric,

thank you for your quick response.

It is interesting to see that expression like "Domain( [0,1] )" is not
allowed. I think the reason is that such expression cannot be
transformed in a tree or the transformation is not unique.

But why does the code "proto::display_expr(Domain[1,2]);" produce the
output:

 subscript(
    terminal(domain_tag)
    ,terminal(2)
  )

and not

 subscript(
    terminal(domain_tag)
    ,terminal(1)
    ,terminal(2)
  ) ?

Eric Niebler schrieb:
> Kim Kuen Tang wrote:
>> Hi all,
>>
>> i have a question and a problem.
>>
>> The problem is that i would like to write code like:
>> domain=Domain([0,1]*[0,1]);
>> where Domain([0,1]*[0,1]) is an expression created with proto.
>>
>> But of course this line of code is illegal, because i have to provide
>> the type of this expression Domain([0,1]*[0,1]).
>
> That line of code is illegal because there is no way to make
> "Domain([0,1]*[0,1])" a valid C++ expression. You need to work on your
> syntax a little.
>
>> So i have to write something like this:
>> Domain([0,1]*[0,1])::type domain=Domain([0,1]*[0,1]);
>> Is this correct?
>>
>> Now the question:
>> To avoid code like above is this what the macro BOOST_PROTO_AUTO is for?
>> Can i write
>> BOOST_PROTO_AUTO( domain,Domain([0,1]*[0,1]) ); .
>
> Yes, that is what BOOST_PROTO_AUTO is for.
>


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