std::ranges::in_value_result
来自cppreference.com
在标头 <algorithm> 定义
|
||
template< class I, class T > struct in_value_result; |
(C++23 起) | |
ranges::in_value_result
是类模板,提供了将迭代器和值作为一个单元存储的方法。
除了下面显示的成员外,此类模板没有其他基类或数据成员,从而它适用于结构化绑定。
此类模板的所有特殊成员函数均为隐式声明,这使得所有特化都为聚合类,并传播数据成员上相应的操作的平凡性、潜在抛出性及 constexpr 性质。
模板形参
I, T | - | ranges::in_value_result 储存的对象的类型。
|
数据成员
std::ranges::in_value_result::in
[[no_unique_address]] I in; |
||
值(应为迭代器)
std::ranges::out_value_result::value
[[no_unique_address]] T value; |
||
值(应为储存的结果值)
成员函数
std::ranges::in_value_result::operator in_value_result<I2, T2>
template<class I2, class T2> requires convertible_to<const I&, I2> && convertible_to<const T&, T2> |
(1) | |
template<class I2, class T2> requires convertible_to<I, I2> && convertible_to<T, T2> |
(2) | |
通过从 *this 的对应成员构造结果的每个数据成员,将 *this 转换为结果。
1) 等价于 return {in, value};。
2) 等价于 return {std::move(in), std::move(value)};。
标准库
这些标准库函数使用 ranges::in_value_result
作为返回值类型:
算法函数 | |
(C++23) |
左折叠范围内的元素,并且返回 pair(迭代器,值) (niebloid) |
用第一个元素作为初始值左折叠范围内的元素并返回 pair(迭代器,optional) (niebloid) |
概要
namespace std::ranges { template<class I, class T> struct in_value_result { [[no_unique_address]] I in; [[no_unique_address]] T value; template<class I2, class T2> requires convertible_to<const I&, I2> && convertible_to<const T&, T2> constexpr operator in_value_result<I2, T2>() const & { return {in, value}; } template<class I2, class T2> requires convertible_to<I, I2> && convertible_to<T, T2> constexpr operator in_value_result<I2, T2>() && { return {std::move(in), std::move(value)}; } }; }
注解
每个使用此返回类型族的标准库算法都声明了新的别名类型,例如 using merge_result = in_in_out_result<I1, I2, O>; 。
这些别名族的名称由算法名添加 “_result
”组成。故 std::ranges::merge
的返回类型命名为 std::ranges::merge_result
。
不同于 std::pair 和 std::tuple,此类模板的拥有名字有意义的数据成员。
示例
本节未完成 原因:example |
参阅
实现二元组,即一对值 (类模板) | |
(C++11) |
实现固定大小的容器,它保有类型可以相异的元素 (类模板) |