Boost logo

Ublas :

Subject: [ublas] Extended/overloading ublas
From: kayhman (kayhman_at_[hidden])
Date: 2009-06-03 11:28:19


Hello !

I'd like to extend ublas, i.e. I want to create a new Twist class, and
overload some of the standard operation like addition, inner_prod, ...

I've define the new class as follow :

class twist : public vector<double, ublas::bounded_array<double,3> >
{
    typedef vector<double, bounded_array<double,3> > Base_vector;
    public:
    // Default construction
    twist () : Base_vector(3)
    {}
    // Construction and assignment from a uBLAS vector expression or copy
assignment
    template <class R> twist (const vector_expression<R>& r) :
Base_vector(r)
    {}
    template <class R> void operator=(const vector_expression<R>& r)
    {
        Base_vector::operator=(r);
    }
    template <class R> void operator=(const Base_vector& r)
    {
        Base_vector::operator=(r);
    }
};

And I've overloaded the sum specializing the following templated function :

template<>
BOOST_UBLAS_INLINE
vector_binary_traits<twist,
                    twist,
                    scalar_plus<double,double> >::result_type
operator + (const vector_expression<twist > &e1,
        const vector_expression<twist > &e2)
{
    typedef vector_binary_traits<twist, twist, scalar_plus<double,double>
>::expression_type expression_type;
    std::cout << "twist sum !!!!" << std::endl;
    return expression_type (e1(), e2());
}

And I get the following error (using gcc-4.2):

../../../boost/numeric/ublas/expression_types.hpp: In member function ‘const
E& boost::numeric::ublas::vector_expression<E>::operator()() const [with E =
boost::numeric::ublas::twist]’:
twist.cpp:37: instantiated from here
../../../boost/numeric/ublas/expression_types.hpp:184: error: invalid
static_cast from type ‘const
boost::numeric::ublas::vector_expression<boost::numeric::ublas::twist>*
const’ to type ‘const boost::numeric::ublas::twist*’

Do you have any idea of where is my mistake ?

Thanks,

kayhman

P.S. : a small example is enclosed.