reference_wrapper (Clase)
Contiene una referencia.
Sintaxis
template <class Ty>
class reference_wrapper
{
typedef Ty type;
reference_wrapper(Ty&) noexcept;
operator Ty&() const noexcept;
Ty& get() const noexcept;
template <class... Types>
auto operator()(Types&&... args) const ->
decltype(std::invoke(get(), std::forward<Types>(args)...));
};
Comentarios
Un reference_wrapper<Ty>
es un contenedor que se puede asignar de copia o que se puede construir de copia alrededor de una referencia para un objeto o una función de tipo Ty
, y contiene un puntero que señala a un objeto de ese tipo. Un reference_wrapper
puede usarse para almacenar referencias en contenedores estándar, y para pasar objetos mediante referencia a std::bind
.
El tipo Ty
debe ser un tipo de objeto o un tipo de función, o una aserción estática produce un error en tiempo de compilación.
Las funciones del asistente std::ref y std::cref pueden usarse para crear objetos reference_wrapper
.
Miembros
Constructores
Nombre | Descripción |
---|---|
reference_wrapper | Construye un objeto reference_wrapper . |
Typedefs
Nombre | Descripción |
---|---|
result_type | Tipo de resultado débil de la referencia ajustada. |
type | Tipo de la referencia ajustada. |
Funciones
Nombre | Descripción |
---|---|
get | Obtiene la referencia ajustada. |
Operadores
Nombre | Descripción |
---|---|
operator Ty& |
Obtiene un puntero a la referencia ajustada. |
operator() | Llama a la referencia ajustada. |
get
Obtiene la referencia ajustada.
Ty& get() const noexcept;
Comentarios
La función miembro devuelve la referencia ajustada.
Ejemplo
// std__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
operator Ty&
Obtiene la referencia ajustada.
operator Ty&() const noexcept;
Comentarios
El operador miembro devuelve *ptr
.
Ejemplo
// std__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
operator()
Llama a la referencia ajustada.
template <class... Types>
auto operator()(Types&&... args);
Parámetros
Tipos
Los tipos de la lista de argumentos.
args
La lista de argumentos.
Comentarios
El miembro de plantilla operator()
devuelve std::invoke(get(), std::forward<Types>(args)...)
.
Ejemplo
// std__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
Construye un objeto reference_wrapper
.
reference_wrapper(Ty& val) noexcept;
Parámetros
Ty
El tipo que se va a ajustar.
val
El valor que se va a ajustar.
Comentarios
El constructor almacena el valor almacenado ptr
en &val
.
Ejemplo
// std__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
result_type
Tipo de resultado débil de la referencia ajustada.
typedef R result_type;
Comentarios
La definición de tipo result_type
es un sinónimo para el tipo de resultado débil de una función ajustada. Esta definición de tipo solo es significativa para los tipos de función.
Ejemplo
// std__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
type
Tipo de la referencia ajustada.
typedef Ty type;
Comentarios
La definición de tipo es un sinónimo del argumento de plantilla Ty
.
Ejemplo
// std__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