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