Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2007-10-16 14:11:36


on Sat Oct 13 2007, "Peng Yu" <pengyu.ut-AT-gmail.com> wrote:

> On 10/13/07, John Maddock <john_at_[hidden]> wrote:
>> Peng Yu wrote:
>> > Hi,
>> >
>> > Suppose I define a class fixed_point as
>> >
>> > class fixed_point{
>> > ....some operations are defined here
>> >
>> > private:
>> > int _integer_part;
>> > unsigned _fractional_part
>> > }
>> >
>> > I want is_arithmetic<fixed_point>::type to be true_
>>
>> The aim of is_arithmetic is that it returns true only for built-in
>> arithmetic types: in other words it's a type introspection tool. If you
>> specialise it for UDT's you will very likely break other code (for example
>> has_trivial_XXX assumes that all arithmetic types have trivial
>> construct/asign/copy/destroy operations). Probably the correct traits to be
>> specialising (and using to detect "numbers") is std::numeric_limits.
>
> Unfortunately, there are not types that contain constants in
> std::numeric_limits as in the boost type_traits library. If I want do
> metaprogramming based the types, I can not used numeric_limits. You
> have a point that specialize is_arithmetic might break other code. But
> are there any other walk around for this problem of adding user
> defined types?

Yes.

        template <class T>
        struct my_is_arithmetic : boost::is_arithmetic<T> {};

now use my_is_arithmetic and specialize it for fixed_point.

-- 
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net