Udostępnij za pośrednictwem


reference_wrapper — Klasa

Opakowuje odwołanie.

Składnia

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)...));
};

Uwagi

A reference_wrapper<Ty> to konstruowalny i kopiowalny otoka przypisywana wokół odwołania do obiektu lub funkcji typu Ty, i zawiera wskaźnik wskazujący obiekt tego typu. Element reference_wrapper może służyć do przechowywania odwołań w standardowych kontenerach i przekazywania obiektów za pomocą odwołania do std::bindelementu .

Typ Ty musi być typem obiektu lub typem funkcji albo asercją statyczną kończy się niepowodzeniem w czasie kompilacji.

Funkcje pomocnika std::ref i std::cref mogą służyć do tworzenia reference_wrapper obiektów.

Członkowie

Konstruktory

Nazwa/nazwisko opis
Reference_wrapper Tworzy element reference_wrapper.

Typedefs

Nazwa/nazwisko opis
Result_type Słaby typ wyniku opakowanego odwołania.
type Typ opakowanego odwołania.

Funkcje

Nazwa/nazwisko opis
get Uzyskuje opakowane odwołanie.

Operatory

Nazwa/nazwisko opis
operator Ty& Pobiera wskaźnik do opakowanego odwołania.
Operator() Wywołuje zawinięte odwołanie.

get

Uzyskuje opakowane odwołanie.

Ty& get() const noexcept;

Uwagi

Funkcja składowa zwraca opakowane odwołanie.

Przykład

// 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&

Pobiera opakowane odwołanie.

operator Ty&() const noexcept;

Uwagi

Operator elementu członkowskiego zwraca wartość *ptr.

Przykład

// 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()

Wywołuje zawinięte odwołanie.

template <class... Types>
auto operator()(Types&&... args);

Parametry

Typy
Typy list argumentów.

Args
Lista argumentów.

Uwagi

Element członkowski operator() szablonu zwraca wartość std::invoke(get(), std::forward<Types>(args)...).

Przykład

// 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

Tworzy element reference_wrapper.

reference_wrapper(Ty& val) noexcept;

Parametry

Ty
Typ do opakowania.

Val
Wartość do opakowania.

Uwagi

Konstruktor ustawia przechowywaną wartość ptr na &val.

Przykład

// 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

Słaby typ wyniku opakowanego odwołania.

typedef R result_type;

Uwagi

Typedef result_type jest synonimem słabego typu wyniku opakowanej funkcji. Ta definicja typu ma znaczenie tylko dla typów funkcji.

Przykład

// 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

Typ opakowanego odwołania.

typedef Ty type;

Uwagi

Typedef jest synonimem argumentu Tyszablonu .

Przykład

// 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