Sdílet prostřednictvím


reference_wrapper – třída

Zabalí odkaz.

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

Poznámky

A reference_wrapper<Ty> je konstruktovatelný a kopírovat přiřaditelný obálka kolem objektu nebo funkce typu Tya obsahuje ukazatel, který odkazuje na objekt daného typu. Lze reference_wrapper použít k ukládání odkazů ve standardních kontejnerech a k předávání objektů odkazem na std::bind.

Typ Ty musí být typ objektu nebo typ funkce nebo statický kontrolní výraz selže v době kompilace.

Pomocné funkce std::ref a std::cref lze použít k vytváření reference_wrapper objektů.

Členové

Konstruktory

Název Popis
reference_wrapper Vytvoří .reference_wrapper

Typedefs

Název Popis
result_type Slabý typ výsledku zabaleného odkazu.
type Typ zabaleného odkazu.

Funkce

Název Popis
get Získá zabalený odkaz.

Operátory

Název Popis
operator Ty& Získá ukazatel na zabalený odkaz.
operator() Volá zabalený odkaz.

get

Získá zabalený odkaz.

Ty& get() const noexcept;

Poznámky

Členová funkce vrátí zabalený odkaz.

Příklad

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

operátor Ty&

Získá zabalený odkaz.

operator Ty&() const noexcept;

Poznámky

Operátor členu vrátí *ptr.

Příklad

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

Volá zabalený odkaz.

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

Parametry

Typy
Typy seznamu argumentů.

Args
Seznam argumentů.

Poznámky

Člen šablony operator() vrátí std::invoke(get(), std::forward<Types>(args)...).

Příklad

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

Vytvoří .reference_wrapper

reference_wrapper(Ty& val) noexcept;

Parametry

Ty
Typ, který chcete zabalit.

Val
Hodnota, která se má zalamovat.

Poznámky

Konstruktor nastaví uloženou hodnotu ptr na &val.

Příklad

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

Slabý typ výsledku zabaleného odkazu.

typedef R result_type;

Poznámky

Typedef result_type je synonymem pro slabý typ výsledku zabalené funkce. Tento typef je smysluplný pouze pro typy funkcí.

Příklad

// 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 zabaleného odkazu.

typedef Ty type;

Poznámky

Typedef je synonymem pro argument Tyšablony .

Příklad

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