Библиотека 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
>первоначально были частью библиотеки Тюпле Яакко Ярви. Их «распространил на<boost::
>статус» Петр Димов, потому что они вообще полезны. Дуглас Грегор и Дэйв Абрахамс внесли свой вклад<is_reference_wrapper
>и<unwrap_reference
>. Фрэнк Мори Хесс и Рональд Гарсия внесли свой вклад<boost::unwrap_ref
>.