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::bind
elementu .
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.
Elementy członkowskie
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 Ty
szablonu .
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