
"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.
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
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. 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