|
Ublas : |
Subject: Re: [ublas] [bindings][traits] Stricter traits
From: Rutger ter Borg (rutger_at_[hidden])
Date: 2009-04-19 09:34:56
Karl Meerbergen wrote:
> Rutger,
>
> Strictly speaking the bindings are only defined for numeric
> value_type's... is_scalar would be is_numeric?
I agree, I've committed a is_numeric metafunction (real/complex/integral
types).
> This specialization would exist, but not be useful in any bindings.
>
That's right, I would like to have "not useful" equal to "non existent", so
the metafunction is_bindable_vector works correct. I've committed the piece
of code below [see 1] to vector_traits, this seems to give what I want. It
checks if value_type defined by detail_traits is a numeric type. If it is,
is derives from detail_traits.
Now, is_bindable_vector has more correct type-outputs,
vector< int > -> true
vector< vector< int > > -> false (fixed)
int, void, etc. -> false
ublas_vector<double> -> true
ublas_matrix -> false
etc. I propose we do the same for matrix_traits.
Cheers,
Rutger
[1]
// vector_traits<> generic version: no specialization(s)
template< typename V, typename Enable = void>
struct vector_traits {};
// vector_traits<>, specializes if ::value_type is numeric
template <typename V>
struct vector_traits< V, typename boost::enable_if<
is_numeric< typename vector_detail_traits< typename
boost::remove_const<V>::type, V >::value_type >
>::type >:
vector_detail_traits< typename boost::remove_const<V>::type, V > {};