Boost C++ 库

...世界上最受尊敬和专家设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

ref

简介
参考
致谢

作者

  • Jaakko Järvi
  • Peter Dimov
  • Douglas Gregor
  • Dave Abrahams
  • Frank Mori Hess
  • Ronald Garcia

Ref 库是一个小型库,可用于将引用传递给通常会复制其参数的函数模板(算法)。它定义了类模板 boost::reference_wrapper<T>,两个函数 boost::refboost::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> 既可复制构造,也可赋值(普通引用不可赋值)。

表达式 boost::ref(x) 返回一个 boost::reference_wrapper<X>(x),其中 Xx 的类型。类似地,boost::cref(x) 返回一个 boost::reference_wrapper<X const>(x)

表达式 boost::unwrap_ref(x) 返回一个 boost::unwrap_reference<X>::type&,其中 Xx 的类型。

如果 Treference_wrapper,则表达式 boost::is_reference_wrapper<T>::valuetrue,否则为 false

如果 Treference_wrapper,则类型表达式 boost::unwrap_reference<T>::typeT::type,否则为 T

参考

头文件 <boost/core/ref.hpp>

namespace boost {
  template<typename T> struct is_reference_wrapper;

  template<typename T> class reference_wrapper;

  template<typename T> struct unwrap_reference;
  template<typename T> reference_wrapper< T > const ref(T &);
  template<typename T> reference_wrapper< T const > const cref(T const &);
  template<typename T> void ref(T const &&);
  template<typename T> void cref(T const &&);
  template<typename T> unwrap_reference< T >::type & unwrap_ref(T &);
}

refcref 最初是 Jaakko Järvi 的 Tuple 库的一部分。 Peter Dimov 将它们“提升为 boost:: 状态”,因为它们通常很有用。 Douglas Gregor 和 Dave Abrahams 贡献了 is_reference_wrapperunwrap_reference。 Frank Mori Hess 和 Ronald Garcia 贡献了 boost::unwrap_ref


PrevUpHomeNext