Boost logo

Ublas :

Subject: [ublas] What is the need of scalar expression templates?
From: Marco Guazzone (marco.guazzone_at_[hidden])
Date: 2010-07-18 14:13:05


Hi,

Looking at norm_* operations I've realized that they are implemented
as scalar expression templates.

My question is: why?

For instance, instead of having:
--- [code] ---
    template<class E>
    BOOST_UBLAS_INLINE
    typename matrix_scalar_unary_traits<E, matrix_norm_1<E> >::result_type
    norm_1 (const matrix_expression<E> &e) {
        typedef typename matrix_scalar_unary_traits<E,
matrix_norm_1<E> >::expression_type expression_type;
        return expression_type (e ());
    }
-- [/code] ---

why not simply having (possibly introducing some logic for
differentiating between different kind of matrices -- dense,
sparse...):

--- [code] ---
    template<class E>
    BOOST_UBLAS_INLINE
    typename matrix_traits<E>::value_type norm_1 (const
matrix_expression<E> &e) {
       // Code that computes the matrix norm 1
       value_type norm;
       for (...) {...}
       return norm;
    }
--- [/code] ---

I'm trying to figure out a real example where the solution with
expression templates is better, but I cannot find it.

Note, this is not a critic to the code.
I'm developing some container-to-scalar functions (max,sum,...) and
since I'm not actually using expression templates I would like to know
what is the right way.

Thank you very much for the help!

Best,

-- Marco