Classe reference_wrapper

Esegue il wrapping di un riferimento

Sintassi

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

Osservazioni:

Un oggetto reference_wrapper<Ty> è un wrapper costruibile e assegnabile per la copia per un riferimento a un oggetto o a una funzione di tipo Ty e contiene un puntatore che punta a un oggetto di quel tipo. Un oggetto reference_wrapper può essere usato per archiviare i riferimenti in contenitori standard e per passare gli oggetti per riferimento a std::bind.

Il tipo Ty deve essere un tipo di oggetto o un tipo di funzione, altrimenti si verifica un errore di asserzione statica in fase di compilazione.

Le funzioni helper std::ref e std::cref possono essere usate per creare oggetti reference_wrapper.

Membri

Costruttori

Nome Descrizione
reference_wrapper Costruisce un oggetto reference_wrapper.

Typedef

Nome Descrizione
result_type Tipo di risultato di un riferimento debole di cui è stato eseguito il wrapping.
type Tipo di riferimento di cui è stato eseguito il wrapping.

Funzioni

Nome Descrizione
get Ottiene il riferimento di cui è stato eseguito il wrapping.

Operatori

Nome Descrizione
operator Ty& Ottiene un puntatore al riferimento di cui è stato eseguito il wrapping.
operator() Chiama il riferimento di cui è stato eseguito il wrapping.

get

Ottiene il riferimento di cui è stato eseguito il wrapping.

Ty& get() const noexcept;

Osservazioni:

La funzione membro restituisce il riferimento al wrapper.

Esempio

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

Operatore Ty&

Ottiene il riferimento di cui è stato eseguito il wrapping.

operator Ty&() const noexcept;

Osservazioni:

L'operatore membro restituisce *ptr.

Esempio

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

Chiama il riferimento di cui è stato eseguito il wrapping.

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

Parametri

Tipi
Tipi dell'elenco di argomenti.

args
Elenco di argomenti.

Osservazioni:

La funzione modello operator() restituisce std::invoke(get(), std::forward<Types>(args)...).

Esempio

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

Costruisce un oggetto reference_wrapper.

reference_wrapper(Ty& val) noexcept;

Parametri

Ty
Tipo di cui eseguire il wrapping.

val
Valore di cui eseguire il wrapping.

Osservazioni:

Il costruttore imposta il valore archiviato ptr su &val.

Esempio

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

Tipo di risultato di un riferimento debole di cui è stato eseguito il wrapping.

typedef R result_type;

Osservazioni:

Typedef result_type è un sinonimo del tipo di risultato debole di una funzione di cui è stato eseguito il wrapping. Questo typedef è significativo solo per i tipi di funzione.

Esempio

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

Tipo di riferimento di cui è stato eseguito il wrapping.

typedef Ty type;

Osservazioni:

Typedef è un sinonimo dell'argomento di modello Ty.

Esempio

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