Hi Boosters,

I was wondering if it would be possible to implement a wrapper around
built-in types to provide automatic detection of conversion
problems:


template< typename T >
class safe_numeric : boost::operators< safe_numeric<T> >
{
public:
    typedef boost::detail::fixed_numeric_limits<T> result_traits;

    safe_numeric() : t_( T() )
    {
    }

    template< typename S >
    safe_numeric( S s ) : t_( boost::numeric_cast<T>( s ) )
    {
     }

    template< typename S >
    safe_numeric& operator=( S s )
    {
 t_ = boost::numeric_cast<T>( s );
 return *this;
    }

    operator T() const
    {
   return t_;
    }

private:
    T t_;
};


namespace boost
{
    namespace detail
    {
 template <class T>
 struct fixed_numeric_limits< safe_numeric<T> > :
     public std::numeric_limits< T >
 {
     static const bool is_specialized = true;
 };
    }
}

typedef safe_numeric<char>   Char;
typedef safe_numeric<short>  Short;
typedef safe_numeric<int>    Int;
typedef safe_numeric<long>   Long;
typedef safe_numeric<float>  Float;
typedef safe_numeric<double> Double;

Now, the most interesting question is if it's possible to get complete
transparency for the clients perspektive. I guess it's
a matter  of overloading operators appropriately. Any comments on the
usefullness of such a template?

regards

Thorsten Ottosen

--
Thorsten Ottosen, Aalborg University
[EMAIL PROTECTED]
---------------------------------------------------
C++:

my_map[key]++;

Java:

if ( !my_map.containsKey( key ) )
    my_map.put( key, new Integer( 1 ) );
else
{
    Integer count = ( Integer )my_map.get( key ) );
    int icount = count.IntValue();
    my_map.put( key, new Integer( ++icount ) );
}




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to