Boost logo

Boost :

From: Andy Little (andy_at_[hidden])
Date: 2004-08-16 20:11:06


"Neal D. Becker" wrote

> Thanks for the links. I am currently using ublas for this. It has
> promote_traits in traits.hpp. This does what I need, and is part of the
> current boost release.

Sure... I am using Alex Gurtovoys, promotion_traits.hpp so I'll certainly
take a look.

One observation... As I have been moving along with my physical quantities
library, I have been discovered that 'generic' result_types
need this :

template<...>
binary_operation<LHS,plus,RHS>::result_type operator + (LHS lhs, RHS rhs);

rather than

template<...>
promote_traits <LHS,RHS>::result_type operator+(LHS,RHS);

Rationale ...for more complicated types results of (say) multiplication
arent the same as for (say) addition.
And for UDTs the value_types too may be compatible but different, so they
need nested result_types.

Another useful extension is to use enable_if, for selective overloading of
operator functions. I have wrapped this up in a modified binary_operation
ie
binary_operation_if<Predicate,LHS,plus,RHS>::result_type operator + (LHS
lhs, RHS rhs);

This works well when multiplying UDTs by numerics ie int double etc, where
The predicate can be "is_this_value_type a compatible value_type for my
UDT".
This can save a large amount of work overloading operator functions.

regards
Andy Little


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk