Classe reference_wrapper
Esegue il wrapping di un riferimento
Sintassi
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)...));
};
Osservazioni:
Un oggetto reference_wrapper<Ty>
è un wrapper costruibile e assegnabile per la copia per un riferimento a un oggetto o a una funzione di tipo Ty
e contiene un puntatore che punta a un oggetto di quel tipo. Un oggetto reference_wrapper
può essere usato per archiviare i riferimenti in contenitori standard e per passare gli oggetti per riferimento a std::bind
.
Il tipo Ty
deve essere un tipo di oggetto o un tipo di funzione, altrimenti si verifica un errore di asserzione statica in fase di compilazione.
Le funzioni helper std::ref e std::cref possono essere usate per creare oggetti reference_wrapper
.
Membri
Costruttori
Nome | Descrizione |
---|---|
reference_wrapper | Costruisce un oggetto reference_wrapper . |
Typedef
Nome | Descrizione |
---|---|
result_type | Tipo di risultato di un riferimento debole di cui è stato eseguito il wrapping. |
type | Tipo di riferimento di cui è stato eseguito il wrapping. |
Funzioni
Nome | Descrizione |
---|---|
get | Ottiene il riferimento di cui è stato eseguito il wrapping. |
Operatori
Nome | Descrizione |
---|---|
operator Ty& |
Ottiene un puntatore al riferimento di cui è stato eseguito il wrapping. |
operator() | Chiama il riferimento di cui è stato eseguito il wrapping. |
get
Ottiene il riferimento di cui è stato eseguito il wrapping.
Ty& get() const noexcept;
Osservazioni:
La funzione membro restituisce il riferimento al wrapper.
Esempio
// 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
Operatore Ty&
Ottiene il riferimento di cui è stato eseguito il wrapping.
operator Ty&() const noexcept;
Osservazioni:
L'operatore membro restituisce *ptr
.
Esempio
// 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()
Chiama il riferimento di cui è stato eseguito il wrapping.
template <class... Types>
auto operator()(Types&&... args);
Parametri
Tipi
Tipi dell'elenco di argomenti.
args
Elenco di argomenti.
Osservazioni:
La funzione modello operator()
restituisce std::invoke(get(), std::forward<Types>(args)...)
.
Esempio
// 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
Costruisce un oggetto reference_wrapper
.
reference_wrapper(Ty& val) noexcept;
Parametri
Ty
Tipo di cui eseguire il wrapping.
val
Valore di cui eseguire il wrapping.
Osservazioni:
Il costruttore imposta il valore archiviato ptr
su &val
.
Esempio
// 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 di risultato di un riferimento debole di cui è stato eseguito il wrapping.
typedef R result_type;
Osservazioni:
Typedef result_type
è un sinonimo del tipo di risultato debole di una funzione di cui è stato eseguito il wrapping. Questo typedef è significativo solo per i tipi di funzione.
Esempio
// 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 di riferimento di cui è stato eseguito il wrapping.
typedef Ty type;
Osservazioni:
Typedef è un sinonimo dell'argomento di modello Ty
.
Esempio
// 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