$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Korcan Hussein (korcan_h_at_[hidden])
Date: 2005-10-22 15:04:38
"Larry Evans" <cppljevans_at_[hidden]> wrote in message 
news:djd9hd$8pf$1_at_sea.gmane.org...
> On 10/21/2005 04:37 PM, Korcan Hussein wrote:
>> "Larry Evans" <cppljevans_at_[hidden]> wrote in message
>
> Please do.  I'm guessing that the replica is encoded in the variant's
> which member function.  IOW, just like the expression type in:
>
> http://www.boost.org/doc/html/variant/tutorial.html#variant.tutorial.recursive
>
> encodes the type of expression as:
>
>   variant.which()    expression type
>   ----------------------------------
>   1                              int
>   2                   binary_op<add>
>   3                   binary_op<sub>
>
> your proposal would do the same for each possible value of expression
> type.  IOW, instead of dynamic dispatching as done by type erasure,
> the dispatching would be done on variant.which()?
Something along the lines of that but not necessarily boost::variant::which, 
use a static visitor (check boost::static_visitor) no dynamic dispatching 
and no casting. Also you are not defining the structure of the tree since it 
could come in any shape/form (which is the point of this), in certain 
occasions only the types of leaf node operands are the most necessary info 
to be given by a user just once the rest is automated.
Also (as I forget to mention earlier) boost::variant can not be used 
directly on it's own since directly assigning/construction from a 
compile-time expression tree will not work. You need to wrap it up, have a 
template constructor that takes an expression tree and automates tree 
construction, most of which is partially evaluated at compile-time, I have 
code that does this already and is trivial. I also forgot to mention that 
the most of the code used for the expression templates can be reused for 
this.
Another advantage of this over erasing type is that more nodes can easily be 
added in other expressions, you could have a mix of compile-time & run-time 
expression trees etc.
I did want to know if this has already been considered or already in use 
before posting code but I think I'll go to tidy up what I have at the moment 
to clarify things. Where should I post/put the example?