reference_wrapper-Klasse
Umschließt einen Verweis.
Syntax
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)...));
};
Hinweise
Ein reference_wrapper<Ty>
-Wrapper kann um einen Verweis auf ein Objekt oder eine Funktion des Typs Ty
über eine Kopie erstellt und zugewiesen werden und enthält einen Zeiger, der auf ein Objekt dieses Typs zeigt. Ein reference_wrapper
kann zum Speichern von Verweisen in Standardcontainern und zum Übergeben von Objekten durch einen Verweis auf std::bind
verwendet werden.
Der Ty
-Typ muss ein Objekttyp oder Funktionstyp sein, oder eine statische Assertion kann nicht zum Zeitpunkt der Kompilierung ausgeführt werden.
Die Hilfsfunktionen std::ref und std::cref dienen zum Erstellen von reference_wrapper
-Objekten.
Member
Konstruktoren
Name | Beschreibung |
---|---|
reference_wrapper | Erstellt ein Objekt vom Typ reference_wrapper . |
TypeDefs
Name | Beschreibung |
---|---|
result_type | Der schwache Ergebnistyp des umschlossenen Verweises. |
type | Der Typ des umschlossenen Verweises. |
Functions
Name | Beschreibung |
---|---|
get | Ruft den umschlossenen Verweis ab. |
Operatoren
Name | Beschreibung |
---|---|
operator Ty& |
Ruft einen Zeiger auf den umschlossenen Verweis ab. |
operator() | Ruft den umschlossenen Verweis auf. |
get
Ruft den umschlossenen Verweis ab.
Ty& get() const noexcept;
Hinweise
Die Memberfunktion gibt den umschlossenen Verweis zurück.
Beispiel
// 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&
Ruft den umschlossenen Verweis auf.
operator Ty&() const noexcept;
Hinweise
Der Memberoperator gibt *ptr
zurück.
Beispiel
// 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()
Ruft den umschlossenen Verweis auf.
template <class... Types>
auto operator()(Types&&... args);
Parameter
Typen
Die Argumentlisttypen.
args
Die Argumentliste.
Hinweise
Das Vorlagenmember operator()
gibt std::invoke(get(), std::forward<Types>(args)...)
zurück.
Beispiel
// 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
Erstellt ein Objekt vom Typ reference_wrapper
.
reference_wrapper(Ty& val) noexcept;
Parameter
Ty
Der zu umschließende Typ.
val
Der zu umschließende Wert.
Hinweise
Der Konstruktor legt den gespeicherten Wert ptr
auf &val
fest.
Beispiel
// 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
Der schwache Ergebnistyp des umschlossenen Verweises.
typedef R result_type;
Hinweise
Die result_type
-Typedefinition ist ein Synonym für den schwachen Ergebnistyp einer umschlossenen Funktion. Diese Typdefinition gilt nur für Funktionstypen.
Beispiel
// 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
Typ
Der Typ des umschlossenen Verweises.
typedef Ty type;
Hinweise
Die Typedef stellt ein Synonym für das Vorlagenargument Ty
dar.
Beispiel
// 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