reference_wrapper, classe
Encapsule une référence.
Syntaxe
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)...));
};
Notes
Un reference_wrapper<Ty>
est un wrapper constructible par copie et assignable par copie autour d’une référence à un objet ou une fonction de type Ty
. Il contient un pointeur vers un objet de ce type. Un reference_wrapper
peut être utilisé pour stocker des références dans des conteneurs standard et passer des objets par référence à std::bind
.
Le type Ty
doit être un type d’objet ou un type de fonction. Sinon, une assertion statique échoue au moment de la compilation.
Les fonctions d’assistance std::ref et std::cref peuvent être utilisées pour créer des objets reference_wrapper
.
Membres
Constructeurs
Nom | Description |
---|---|
reference_wrapper | Construit un objet reference_wrapper . |
Typedefs
Nom | Description |
---|---|
result_type | Type de résultat faible de la référence encapsulée. |
type | Type de la référence encapsulée. |
Functions
Nom | Description |
---|---|
get | Obtient la référence encapsulée. |
Opérateurs
Nom | Description |
---|---|
operator Ty& |
Obtient un pointeur vers la référence encapsulée. |
operator() | Appelle la référence encapsulée. |
get
Obtient la référence encapsulée.
Ty& get() const noexcept;
Notes
La fonction membre retourne la référence incluse dans un wrapper.
Exemple
// 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
opérateur Ty&
Obtient la référence incluse dans un wrapper.
operator Ty&() const noexcept;
Notes
L’opérateur membre retourne *ptr
.
Exemple
// 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()
Appelle la référence encapsulée.
template <class... Types>
auto operator()(Types&&... args);
Paramètres
Types
Types de la liste d’arguments.
args
Liste d’arguments.
Notes
Le membre de modèle operator()
retourne std::invoke(get(), std::forward<Types>(args)...)
.
Exemple
// 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
Construit un objet reference_wrapper
.
reference_wrapper(Ty& val) noexcept;
Paramètres
Ty
Type à inclure dans un wrapper.
val
Valeur à inclure dans un wrapper.
Notes
Le constructeur définit la valeur stockée ptr
à &val
.
Exemple
// 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
Type de résultat faible de la référence encapsulée.
typedef R result_type;
Notes
Le typedef result_type
est un synonyme pour le type de résultat faible d’une fonction incluse dans un wrapper. Ce typedef est significatif uniquement pour les types de fonction.
Exemple
// 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
Type de la référence encapsulée.
typedef Ty type;
Notes
Le typedef est un synonyme de l'argument de modèle Ty
.
Exemple
// 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