Compartir vía


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