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