Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The latest version of this topic can be found at reference_wrapper Class.
Wraps a reference.
Syntax
template <class Ty>
class reference_wrapper
: public unary_function<T1, Ret> // see below
: public binary_function<T1, T2, Ret> // see below
{
public:
typedef Ty type;
typedef T0 result_type; // see below
reference_wrapper(Ty&);
Ty& get() const;
operator Ty&() const;
template <class T1, class T2, ..., class TN>
typename result_of<T(T1, T2, ..., TN)>::type operator()(T1&, T2&, ..., TN&);
private:
Ty *ptr; // exposition only
};
Remarks
A reference_wrapper<Ty>
is copy constructible and assignable, and holds a pointer that points to an object of type Ty
.
A specialization reference_wrapper<Ty>
is derived from std::unary_function<T1, Ret>
(hence defining the nested type result_type
as a synonym for Ret
and the nested type argument_type
as a synonym for T1
) only if the type Ty
is:
a function type or pointer to function type taking one argument of type T1
and returning Ret
; or
a pointer to a member function Ret T::f() cv
, where cv
represents the member function's cv-qualifiers; the type T1
is cv``T*
; or
a class type that is derived from unary_function<T1, Ret>
.
A specialization reference_wrapper<Ty>
is derived from std::binary_function<T1, T2, Ret>
(hence defining the nested type result_type
as a synonym for Ret
, the nested type first_argument_type
as a synonym for T1
, and the nested type second_argument_type
as a synonym for T2
) only if the type Ty
is:
a function type or pointer to function type taking two arguments of types T1
and T2
and returning Ret
; or
a pointer to a member function Ret T::f(T2) cv
, where cv
represents the member function's cv-qualifiers; the type T1
is cv``T*
; or
a class type that is derived from binary_function<T1, T2, Ret>
.
Constructors
reference_wrapper::reference_wrapper | Constructs a reference_wrapper . |
Typedefs
reference_wrapper::result_type | The weak result type of the wrapped reference. |
reference_wrapper::type | The type of the wrapped reference. |
Member Functions
reference_wrapper::get | Obtains the wrapped reference. |
Operators
reference_wrapper::operator Ty& | Gets a pointer to the wrapped reference. |
reference_wrapper::operator() | Calls the wrapped reference. |
Requirements
Header: <functional>
Namespace: std
reference_wrapper::get
Obtains the wrapped reference.
Ty& get() const;
Remarks
The member function returns INVOKE(get(), t1, t2, ..., tN)
.
Example
// std_tr1__functional__reference_wrapper_get.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int main()
{
int i = 1;
std::reference_wrapper<int> rwi(i);
std::cout << "i = " << i << std::endl;
std::cout << "rwi = " << rwi << std::endl;
rwi.get() = -1;
std::cout << "i = " << i << std::endl;
return (0);
}
i = 1
rwi = 1
i = -1
reference_wrapper::operator Ty&
Gets a pointer to the wrapped reference.
operator Ty&() const;
Parameters
Remarks
The member operator returns *ptr
.
Example
// std_tr1__functional__reference_wrapper_operator_cast.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int main()
{
int i = 1;
std::reference_wrapper<int> rwi(i);
std::cout << "i = " << i << std::endl;
std::cout << "(int)rwi = " << (int)rwi << std::endl;
return (0);
}
i = 1
(int)rwi = 1
reference_wrapper::operator()
Calls the wrapped reference.
template <class T1, class T2, ..., class TN>
typename result_of<T(T1, T2, ..., TN)>::type operator()(T1& t1, T2& t2, ..., TN& tN);
Parameters
TN
The type of the Nth call argument.
tN
The Nth call argument.
Remarks
The template member operator returns INVOKE(get(), t1, t2, ..., tN)
.
Example
// std_tr1__functional__reference_wrapper_operator_call.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val)
{
return (-val);
}
int main()
{
std::reference_wrapper<int (int)> rwi(neg);
std::cout << "rwi(3) = " << rwi(3) << std::endl;
return (0);
}
rwi
(3) = -3
reference_wrapper::reference_wrapper
Constructs a reference_wrapper
.
explicit reference_wrapper(Ty& val);
Parameters
Ty
The type to wrap.
val
The value to wrap.
Remarks
The constructor sets the stored value ptr
to &val
.
Example
// std_tr1__functional__reference_wrapper_reference_wrapper.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val)
{
return (-val);
}
int main()
{
int i = 1;
std::reference_wrapper<int> rwi(i);
std::cout << "i = " << i << std::endl;
std::cout << "rwi = " << rwi << std::endl;
rwi.get() = -1;
std::cout << "i = " << i << std::endl;
return (0);
}
i = 1
rwi = 1
i = -1
reference_wrapper::result_type
The weak result type of the wrapped reference.
typedef T0 result_type;
Remarks
The typedef is a synonym for the weak result type of a wrapped function.
Example
// std_tr1__functional__reference_wrapper_result_type.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val)
{
return (-val);
}
int main()
{
typedef std::reference_wrapper<int (int)> Mywrapper;
Mywrapper rwi(neg);
Mywrapper::result_type val = rwi(3);
std::cout << "val = " << val << std::endl;
return (0);
}
val = -3
reference_wrapper::type
The type of the wrapped reference.
typedef Ty type;
Remarks
The typedef is a synonym for the template argument Ty
.
Example
// std_tr1__functional__reference_wrapper_type.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val)
{
return (-val);
}
int main()
{
int i = 1;
typedef std::reference_wrapper<int> Mywrapper;
Mywrapper rwi(i);
Mywrapper::type val = rwi.get();
std::cout << "i = " << i << std::endl;
std::cout << "rwi = " << val << std::endl;
return (0);
}
i = 1
rwi = 1