std::unwrap_reference, std::unwrap_ref_decay

来自cppreference.com
< cpp‎ | utility‎ | functional
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
函数对象
函数包装
(C++11)
(C++11)
部分函数应用
(C++11)
(C++20)(C++23)
函数调用
(C++17)(C++23)
恒等函数对象
(C++20)
引用包装
(C++11)(C++11)
unwrap_referenceunwrap_ref_decay
(C++20)(C++20)
通透运算符包装
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
取反器
(C++17)
搜索器
旧绑定器与适配器
(C++17 前)
(C++17 前)
(C++17 前)
(C++17 前)
(C++17 前)(C++17 前)(C++17 前)(C++17 前)
(C++20 前)
(C++20 前)
(C++17 前)(C++17 前)
(C++17 前)(C++17 前)

(C++17 前)
(C++17 前)(C++17 前)(C++17 前)(C++17 前)
(C++20 前)
(C++20 前)
 
在标头 <type_traits> 定义
在标头 <functional> 定义
template< class T >
struct unwrap_reference;
(1) (C++20 起)
template< class T >
struct unwrap_ref_decay;
(2) (C++20 起)
1)T 为某类型 Ustd::reference_wrapper<U> ,则提供指名 U& 的成员 typedef type ;否则提供指名 T 的成员 typedef type
2)T 为某类型 Ustd::reference_wrapper<U> ,忽略 cv 限定和引用,则提供指名 U& 的成员 typedef type ;否则提供指名 std::decay_t<T> 的成员 typedef type

添加此页面上描述的任何模板的特化的程序行为未定义。

成员类型

名称 定义
type

1) 若 Tstd::reference_wrapper<U> 则为 U& ;否则为 T

2) 若 std::decay_t<T>std::reference_wrapper<U> 则为 U& ;否则为 std::decay_t<T>

辅助类型

template<class T>
using unwrap_reference_t = typename unwrap_reference<T>::type;
(1) (C++20 起)
template<class T>
using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
(2) (C++20 起)

可能的实现

template <class T>
struct unwrap_reference { using type = T; };
template <class U>
struct unwrap_reference<std::reference_wrapper<U>> { using type = U&; };
 
template< class T >
struct unwrap_ref_decay : std::unwrap_reference<std::decay_t<T>> {};

注解

std::unwrap_ref_decay 进行与 std::make_pairstd::make_tuple 所用者相同的变换。

示例

参阅

可复制构造 (CopyConstructible) 可复制赋值 (CopyAssignable) 的引用包装器
(类模板)
创建一个 pair 对象,其类型根据各实参类型定义
(函数模板)
创建一个 tuple 对象,其类型根据各实参类型定义
(函数模板)