Boost logo

Boost :

From: Pavel Chikulaev (pavel.chikulaev_at_[hidden])
Date: 2005-03-07 12:13:33


"Jonathan Turkanis" <technews_at_[hidden]> wrote in message
news:d0hups$587$1_at_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

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk