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 的類型。

如果 T 是一個 reference_wrapper,表達式 boost::is_reference_wrapper<T>::value 的值為 true,否則為 false

如果 T 是一個 reference_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