...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Copyright © 1999, 2000 Jaakko Järvi
Copyright © 2001, 2002 Peter Dimov
Copyright © 2002 David Abrahams
Subject to the Boost Software License, Version 1.0. See
accompanying file LICENSE_1_0.txt
or copy at
http://www.boost.org/LICENSE_1_0.txt.
Table of Contents
The Ref library is a small library that is useful for passing
references to function templates (algorithms) that would usually
take copies of their arguments. It defines the class template
boost::reference_wrapper<T>
,
two functions
boost::ref
and
boost::cref
that return
instances of boost::reference_wrapper<T>
,
a function boost::unwrap_ref
that unwraps a boost::reference_wrapper<T>
or
returns a reference to any other type of object, and the
two traits classes
boost::is_reference_wrapper<T>
and
boost::unwrap_reference<T>
.
The purpose of
boost::reference_wrapper<T>
is to
contain a reference to an object of type T. It is primarily used to
"feed" references to function templates (algorithms) that take their
parameter by value.
To support this usage,
boost::reference_wrapper<T>
provides an implicit
conversion to T&
. This usually allows the function
templates to work on references unmodified.
boost::reference_wrapper<T>
is
both CopyConstructible and Assignable (ordinary references are not
Assignable).
The expression boost::ref(x)
returns a
boost::reference_wrapper<X>(x)
where X
is the type of x. Similarly,
boost::cref(x)
returns a
boost::reference_wrapper<X const>(x)
.
The expression boost::unwrap_ref(x)
returns a
boost::unwrap_reference<X>::type&
where X
is the type of x.
The expression
boost::is_reference_wrapper<T>::value
is true if T is a reference_wrapper
, and
false otherwise.
The type-expression
boost::unwrap_reference<T>::type
is T::type if T
is a reference_wrapper
, T otherwise.
Last revised: June 03, 2009 at 15:36:08 +0100 |