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 Ty
a 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