7 Mar
                
                    2005
                
            
            
                7 Mar
                
                '05
                
            
            
            
        
    
                6:13 p.m.
            
        "Jonathan Turkanis" <technews@kangaroologic.com> wrote in message 
news:d0hups$587$1@sea.gmane.org...
> I'd like a library which simplifies the implementation of expression 
> templates.
> However, I'd like it to be more general than you have outlined.
More general? Plese tell me what you mean.
> For instance I
> might not want a + -b to be computed as a - b, but I'd like to have this 
> as an
> option, and not just for this particular sequence of operations.
    If you put LAZY_ALIAS(Matrix_ + -Matrix_ = Matrix_ - Matrix_) then
a + -b will be computed as a - b, else it won't.
    Another examples of LAZY_ALIAS:
    LAZY_ALIAS(- - Matrix_ = Matrix_);
    //- - a will be computed as a.
    LAZY_ALIAS(-Matrix_ + Matrix_ = Matrix._2 - Matrix._1);
    //-a + b will be computed as b -a.
> Also, I don't think it needs to be so heavily macro-based.
The key feature of the library is to make library usage as simple as 
possible,
and macros is the only way (AFAIK) to achieve such simplicity.
Examples:
1)    Matrix(LAZY_OP(Matrix_ + Matrix_)) or equal non-macro version
       Matrix(const lazy::binary_op<Matrix, 
lazy::predefined_ops::binary_plus, Matrix> &)
2)    Matrix(LAZY_OP(Matrix_ + Matrix_ * Matrix_)) or equal non-macro 
version
       Matrix(const lazy::binary_op<Matrix, 
lazy::predefined_ops::binary_plus,
            lazy::binary_op <Matrix, lazy::predefined_ops::mutiply, Matrix> 
 > &);
LAZY_ENABLE_OP expands to about 20 lines of code.
So, do you really think it can be less macro-based and
more readable at the same time?
If you have any ideas who do it, please send me how to do it.
--
Pavel Chikulaev