Share via


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