原文： http://www.boost.org/libs/bind/ref.html

# ref.hpp
1.00.0004 (2002-01-27)

## Files

- ref.hpp

## Purpose

boost/ref.hpp ヘッダーでは、クラス テンプレートである boost::reference_wrapper<T> と、boost::reference_wrapper<T> のインスタンスを返す二つの関数 boost::ref と boost::cref、それに二つの特性クラス boost::is_reference_wrapper<T> と boost::unwrap_reference<T> が定義されている。

boost::reference_wrapper<T> の目的は、T 型のオブジェクトへの参照を格納することにある。主に、値渡しの仮引数をとる関数のテンプレート (アルゴリズム) に参照を「食わせる (feed)」のに使われる。

この使い方をサポートするため、boost::reference_wrapper<T> は T & への暗黙の型変換を提供する。このことにより、関数テンプレートが適合していない参照に対しても大抵はうまく働くようになる。

boost::reference_wrapper<T> は CopyConstructible（コピーコンストラクト可能) でかつ Assignable (代入可能) である (通常の参照は Assignable (代入可能) ではない)。

X が x の型である場合、boost::ref(x) という式は boost::reference_wrapper<X>(x) を返す。同様に、boost::cref(x) は boost::reference_wrapper<X const>(x) を返す.

boost::is_reference_wrapper<T>::value という式は、もし T が reference_wrapper であるときには true を返し、それ以外のときには false を返す。

boost::unwrap_reference<T>::type という型式 (type-expression) は、T が reference_wrapper のときには T::type であり、それ以外のときには T である。

## Interface

### Synopsis

    namespace boost
    {
        template<class T> class reference_wrapper;
        template<class T> reference_wrapper<T> ref(T & t);
        template<class T> reference_wrapper<T const> cref(T const & t);
        template<class T> class is_reference_wrapper<T const>;
        template<class T> class unwrap_reference<T const>;
    }

### reference_wrapper

    template<class T> class reference_wrapper
    {
    public:
        typedef T type;

        explicit reference_wrapper(T & t);

        operator T & () const;

        T & get() const;
        T* get_pointer() const;
    };

#### explicit reference_wrapper(T & t)

> 作用: t への参照を格納する reference_wrapper のオブジェクトを構築する。

> 例外: なし。

#### operator T & () const

> 戻り値: 格納した参照。

> 例外: なし。

#### T & get() const

> 戻り値: 格納した参照。

> 例外: なし。

#### T* get_pointer() const

> 戻り値: 格納したオブジェクトへのポインタ。

> 例外: なし。

### ref

    template<class T> reference_wrapper<T> ref(T & t);

> 戻り値: `reference_wrapper<T>(t)`.

> 例外: なし。

### cref

    template<class T> reference_wrapper<T const> cref(T const & t);

> 戻り値: `reference_wrapper<T const>(t)`.

> 例外: なし。

### is_reference_wrapper

    template<class T> class is_reference_wrapper<T const>
    {
     public:
        static bool value = unspecified;
    };

もし `T` が `reference_wrapper` の特殊化版であれば値は true。

### unwrap_reference

    template<class T> class unwrap_reference<T const>
    {
     public:
        typedef unspecified type;
    };

もし `T` が `reference_wrapper` の特殊化版であれば `type` は `T::type` と等価。そうでなければ `type` は `T` と等価。

## Acknowledgements

ref と cref は元々は Jaakko Järvi 氏作の Boost.Tuple というライブラリの一部であった。それが、一般的に有用であるという理由で Peter Dimov 氏の手によって「boost:: に昇格」した。Douglas Gregor 氏と Dave Abrahams 氏が `is_reference_wrapper` と `unwrap_reference` を提供した。

Copyright © 2001 by Peter Dimov and Multi Media Ltd. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.

Japanese Translation Copyright © 2003 Fujio Kojima

オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。