Jaakko
Järvi
Peter
Dimov
Douglas
Gregor
Dave
Abrahams
1999
2000
Jaakko Järvi
2001
2002
Peter Dimov
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.
A utility library for passing references to generic functions
Boost.Ref
Introduction
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>
,
the two functions
boost::ref
and
boost::cref
that return
instances of boost::reference_wrapper<T>
, 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::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.
Contains a reference to an object of type
T.
reference_wrapper
is primarily used to "feed" references to function templates
(algorithms) that take their parameter by value. It provides
an implicit conversion to
T&, which usually allows
the function templates to work on references
unmodified.
T
T&
Constructs a
reference_wrapper
object that stores a reference to
t.
Does not throw.
T&
The stored reference.
Does not throw.
T&
The stored reference.
Does not throw.
T*
A pointer to the object referenced by the stored reference.
Does not throw.
reference_wrapper<T>
T&
reference_wrapper<T>(t)
Does not throw.
reference_wrapper<T const>
T const&
reference_wrapper<T const>(t)
Does not throw.
Determine if a type T is an instantiation of reference_wrapper.
The value static
constant will be true iff the
type T is a specialization of
reference_wrapper.
bool
unspecified
Find the type in a reference_wrapper.
The typedef type is
T::type if
T is a
reference_wrapper,
T otherwise.
unspecified
Acknowledgements
ref and cref
were originally part of the Tuple library
by Jaakko Järvi. They were "promoted to boost:: status" by
Peter Dimov because they are generally useful. Douglas Gregor and
Dave Abrahams contributed
is_reference_wrapper and
unwrap_reference.