reference_wrapper 类
包装引用。
语法
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)...));
};
备注
reference_wrapper<Ty>
是可构造副本和可指定副本的包装器,它包装对某个 Ty
类型对象或函数的引用,并具有指向该类型对象的指针。 reference_wrapper
可用于将引用存储在标准容器内,并根据对 std::bind
的引用传递对象。
类型 Ty
必须是一种对象类型或函数类型,或会在编译时失败的静态断言。
帮助程序函数 std::ref 和 std::cref 可以用于创建 reference_wrapper
对象。
成员
构造函数
名称 | 描述 |
---|---|
reference_wrapper | 构造一个 reference_wrapper 。 |
Typedef
名称 | 描述 |
---|---|
result_type | 已包装引用的弱结果类型。 |
type | 已包装引用的类型。 |
函数
名称 | 描述 |
---|---|
get | 获取已包装的引用。 |
运算符
名称 | 描述 |
---|---|
operator Ty& |
获取指向已包装引用的指针。 |
operator() | 调用已包装的引用。 |
get
获取已包装的引用。
Ty& get() const noexcept;
注解
成员函数返回已包装的引用。
示例
// 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
运算符 Ty&
获取已包装的引用。
operator Ty&() const noexcept;
备注
该成员运算符将返回 *ptr
。
示例
// 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()
调用已包装的引用。
template <class... Types>
auto operator()(Types&&... args);
参数
类型
参数列表类型。
args
参数列表。
备注
模板成员 operator()
返回 std::invoke(get(), std::forward<Types>(args)...)
。
示例
// 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
构造一个 reference_wrapper
。
reference_wrapper(Ty& val) noexcept;
参数
Ty
要包装的类型。
val
要包装的值。
备注
该构造函数将存储的值 ptr
设置为 &val
。
示例
// 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
已包装引用的弱结果类型。
typedef R result_type;
备注
result_type
typedef 是已包装函数的弱结果类型的同义词。 typedef 仅对函数类型有意义。
示例
// 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
已包装引用的类型。
typedef Ty type;
备注
Typedef 是模板参数 Ty
的同义词。
示例
// 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