|
Ublas : |
From: Dima Sorkin (dsorkin_at_[hidden])
Date: 2005-07-06 03:41:21
Hi.
I have 2 questions about the general concept of
expression templates (ET),rather than about ublas
itself. Since ublas is (or was) built around the
ET concept (ublas is a good example), I decided to
ask them here (I will spread them in 2 separate
messages, this one is the first)
1) Encapsulation of classes that use ETs :
What is the right way ?
Suppose the folowing example:
class A {
typedef some_ublas_matrix_type matr_type;
matr_type M1,M2;
A(const matr_type &M1in,const matr_type &M2in)
:M1(M1in),M2(M2in) {}
public:
A const operator+(A const &a) const {
return A(M1+a.M1,M2+a.M2);
}
};
Then,if I have 4 objects x1,x2,x3,x4 of class A, writing
x4 = x1+x2+x3;
"forces" a temporary (I understand (following the whole
discussion about aliasing) that temporary is created
anyway, but see my question as a concept question).
What should "operator+" return, in order to make the
ETs work ? If it returns some encapsulation of ublas ET,
then I need also write an "operator+" that accepts such
encapsulation.The things start becoming compicated,if
I implement all arith. operators.
Is there some simple way (pattern of design) ?
Thank you.
Dima.