|
Boost : |
From: David Abrahams (abrahams_at_[hidden])
Date: 1998-12-01 14:34:46
Sean Corfield (sean.corfield_at_[hidden]) wrote:
>Any other classes that might be worth exploring? Anything within the
>standard library that we think might usefully be 'adapted' in a
>future-standard way?
Here are a few simple but extremely useful things I've already
implemented, but which my employer holds a copyright on. If someone else
wanted to make a public implementation I'd be happy to review it and
provide help.
NonCopyable -
A simple class which, when derived from, prevents copy construction and
assignment
EqualityComparable<>, LessThanComparable<>
Implements the standard meanings for operator!=, or >, >=, and <=
respectively based on operator== and operator< member functions,
respectively. std::relops is useless for this purpose now. Derive T from
LessThanComparable<T> for example. Uses the "Barton and Nackman trick".
numeric_traits<>
Here's the interface I've implemented. An important extension to this
would use a uniform interface to return the minimum representable value
of T. Note that numeric_limits fails to do what you might expect for
floating point numbers.
template <class T>
class numeric_traits
{
public:
static const bool is_specialized = false;
typedef T value_type; // The parameter type
static value_type zero(); // Zero of that type
static value_type one(); // One, of that type
static value_type portable_min(); // The minimum portably representable
value
static value_type portable_max(); // The maximum portably representable
value
static const bool has_abs_difference_type = false; //
abs_difference_type defined?
static const bool has_difference_type = false; // difference_type
defined?
// for all T values t1 and t2:
typedef unsigned char abs_difference_type; // A type that can represent
|t1-t2|
typedef short difference_type; // A type that can represent t1-t2
// Supports nudge up/down?
static const bool nudgeable = false;
// Computes the next greater representable value after 'x'
static T nudge_up( value_type x );
// Computes the next lesser representable value after 'x'
static T nudge_down( value_type x );
};
HalfOpenRange<T>
Represents a half-open range such as is used with STL random-access
iterators, but which can be used with numeric types as well. Supports
combination with other ranges and a number of other useful operations.
--------------------------------------------------------------
David Abrahams * Mark of the Unicorn, Inc. * abrahams_at_[hidden]
------------------------------------------------------------------------
Free Web-based e-mail groups -- http://www.eGroups.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk