From: Gunter Winkler (guwi17_at_[hidden])
Date: 2006-11-20 05:37:01
On Sunday 19 November 2006 00:13, Manoj Rajagopalan wrote:
> template<typename E>
> void initialize(matrix_expression<E> A,
> typename E::value_type const& value)
Dealing with matrix expression directly is tricky, because of the CRTP usage.
1) You always have to use references to a matrix_expression as function
parameter, because the (default) copy constructor of matrix_expression does
not copy anything. (matrix_expression has no member variables and thus its
size is zero!)
void initialize(matrix_expression<E>& A,
typename E::value_type const& value)
E& A_ref = A(); // this is the "official" way (just hiding the cast)
A_ref = scalar_matrix<typename E::value_type>(A_ref.size1(), A_ref.size2(),
2) Sometimes you have to explicitly create instances (because you need
something to refer to and you can't have a direct instance of a
matrix_range< matrix<int> > sub_A(A,range(1,3),range(1,3));
Never instantiate matrix_expression because it contains no data.
matrix_expression exists only because you need some common type
for all expressions. The price you pay is to use references everywhere.