...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::reference_wrapper — Contains a reference to an object of type T
.
// In header: <boost/core/ref.hpp> template<typename T> class reference_wrapper { public: // types typedef T type; // construct/copy/destruct explicit reference_wrapper(T &) noexcept; reference_wrapper(T &&) = delete; template<typename Y, typename = typename enable_if_c<boost::detail::ref_convertible<Y, T>::value>::type> reference_wrapper(reference_wrapper< Y >) noexcept; // public member functions operator T&() const noexcept; T & get() const noexcept; T * get_pointer() const noexcept; };
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.
reference_wrapper
public
construct/copy/destructexplicit reference_wrapper(T & t) noexcept;
Constructs a
object that stores a reference to reference_wrapper
t
.
Does not throw.
reference_wrapper(T && t) = delete;
Construction from a temporary object is disabled.
template<typename Y, typename = typename enable_if_c<boost::detail::ref_convertible<Y, T>::value>::type> reference_wrapper(reference_wrapper< Y > r) noexcept;
Constructs a
object that stores the reference stored in the compatible reference_wrapper
reference_wrapper
r
.
Only enabled when Y*
is convertible to T*
.
Does not throw.