Partilhar via


Classe reference_wrapper

Encapsula uma referência.

Sintaxe

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)...));
};

Comentários

Um reference_wrapper<Ty> é uma cópia construível e copia um wrapper atribuível em uma referência a um objeto ou uma função de tipo Ty, além de conter um ponteiro que aponta para um objeto desse tipo. Um reference_wrapper pode ser usado para armazenar referências em contêineres padrão e para passar objetos por referência a std::bind.

O tipo Ty deve ser um tipo de objeto ou um tipo de função ou uma falha de declaração estática no tempo de compilação.

As funções auxiliares std::ref e std::cref podem ser usadas para criar objetos reference_wrapper.

Membros

Construtores

Nome Descrição
reference_wrapper Constrói um reference_wrapper.

Typedefs

Nome Descrição
result_type O tipo de resultado fraco da referência encapsulada.
tipo O tipo da referência encapsulada.

Funções

Nome Descrição
get Obtém a referência encapsulada.

Operadores

Nome Descrição
operator Ty& Obtém um ponteiro para a referência encapsulada.
operador() Chama a referência encapsulada.

get

Obtém a referência encapsulada.

Ty& get() const noexcept;

Comentários

A função membro retorna a referência encapsulada.

Exemplo

// 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

operador Ty&

Obtém a referência encapsulada.

operator Ty&() const noexcept;

Comentários

O operador de membro retorna *ptr.

Exemplo

// 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

operador()

Chama a referência encapsulada.

template <class... Types>
auto operator()(Types&&... args);

Parâmetros

Types
Os tipos da lista de argumentos.

args
A lista de argumentos.

Comentários

O membro de modelo operator() retorna std::invoke(get(), std::forward<Types>(args)...).

Exemplo

// 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

Constrói um reference_wrapper.

reference_wrapper(Ty& val) noexcept;

Parâmetros

Ty
O tipo a ser encapsulado.

val
O valor a ser encapsulado.

Comentários

O construtor define o valor armazenado ptr para &val.

Exemplo

// 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

O tipo de resultado fraco da referência encapsulada.

typedef R result_type;

Comentários

O typedef result_type é um sinônimo do tipo de resultado fraco de uma função encapsulada. Este typedef só é significativo para tipos de função.

Exemplo

// 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

tipo

O tipo da referência encapsulada.

typedef Ty type;

Comentários

O typedef é um sinônimo do argumento de modelo Ty.

Exemplo

// 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