Teilen über


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 *ptrzurü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 Tydar.

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