|
Boost : |
From: scleary_at_[hidden]
Date: 2001-08-25 08:23:00
> > int_traits::is_zero(x) -- returns true if x == 0
> > int_traits::is_positive(x) -- returns true if x >= 0
> > int_traits::is_odd(x) -- returns true if (x % 2) == 1
>
> I do net yet understand completely what you mean.
Just something simple, like:
namespace int_traits {
template <typename T>
bool is_zero(const T & x) { return (x == 0); }
bool is_zero(const unlimited & x) { return x.is_zero(); }
// same for others
}
then usage is:
unlimited i;
int j;
int_traits::is_zero(i); // equivalent to i.is_zero()
int_traits::is_zero(j); // equivalent to j == 0
Note that this technique does not follow the traditional application
of 'traits' -- that's why 'traits' was in quotes. Traditional traits
only provide properties of a type; these 'traits' add 'type
methods'. Similar techniques have been done before: in the Standard,
char_traits provides both properties and methods.
-Steve
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk