Библиотека Ref - это небольшая библиотека, которая полезна для передачи ссылок на шаблоны функций (алгоритмы), которые обычно берут копии своих аргументов. Он определяет шаблон класса<boost::reference_wrapper<T>>, две функции<boost::ref>и<boost::cref>, которые возвращают экземпляры<boost::reference_wrapper<T>>, функцию<boost::unwrap_ref>, которая разворачивает<boost::reference_wrapper<T>>или возвращает ссылку на любой другой тип объекта, и два класса признаков<boost::is_reference_wrapper<T>>и<boost::unwrap_reference<T>>.
Цель<boost::reference_wrapper<T>>состоит в том, чтобы содержать ссылку на объект типа<T>. Он в основном используется для «питания» ссылок на шаблоны функций (алгоритмы), которые принимают их параметр по значению.
Для поддержки этого использования<boost::reference_wrapper<T>>обеспечивает неявное преобразование в<T&>. Обычно это позволяет шаблонам функций работать над ссылками без изменений.
<boost::reference_wrapper<T>>является как CopyConstructible, так и Assignable (обычные ссылки не являются Assignable).
<expressionboost::ref(x)>возвращает<boost::reference_wrapper<X>(x)>, где<X>является типом<x>.<boost::cref(x)>Возвращает<boost::reference_wrapper<Xconst>(x)>.
Выражение<boost::unwrap_ref(x)>возвращает<boost::unwrap_reference<X>::type&>, где<X>является типом<x>.
<boost::is_reference_wrapper<T>::value>—<true>, если<T>—<reference_wrapper>, а<false>— иначе.
<boost::unwrap_reference<T>::type>—<T::type>, если<T>—<reference_wrapper>,<T>иначе.
 
<ref>и<cref>первоначально были частью библиотеки Тюпле Яакко Järvi. Их «распространил на<boost::>статус» Петр Димов, потому что они вообще полезны. Дуглас Грегор и Дэйв Абрахамс внесли свой вклад<is_reference_wrapper>и<unwrap_reference>. Фрэнк Мори Хесс и Рональд Гарсия внесли свой вклад<boost::unwrap_ref>.