std::extents、std::dextents、std::dims
来自 cppreference.com
在头文件 <mdspan> 中定义 |
||
template< class IndexType, std::size_t... Extents > class extents; |
(1) | (自 C++23 起) |
template< class IndexType, std::size_t Rank > using dextents = /* 见下文 */ |
(2) | (自 C++23 起) |
template< std::size_t Rank, class IndexType = std::size_t > using dims = std::dextents<IndexType, Rank>; |
(3) | (自 C++26 起) |
1) 表示一个等级等于 sizeof...(Extents) 的多维索引空间。
2) 一个用于全动态
extents
的便捷别名模板。令 d
表示 std::dynamic_extent,它的每个特化 dextents<IndexType, Rank> 等价于 extents<IndexType /*, d, d, ..., d*/>(即,d
被重复了 Rank
次)。extents
的每个特化都模拟 regular
并且是 TriviallyCopyable。
内容 |
[edit] 模板参数
IndexType | - | 每个非动态 Extents 的类型。应为带符号或无符号整数类型。否则,程序格式错误。 |
Extents | - | 表示每个等级索引的范围(整数区间的长度)。它的每个元素要么等于 std::dynamic_extent(在这种情况下,它表示一个动态范围,范围长度将动态确定),要么可以表示为类型 IndexType 的值(那么它表示一个静态范围,范围长度只是它的值),否则程序格式错误。 |
Rank | - | 表示全动态 extents 的等级。 |
[edit] 成员类型
成员类型 | 定义 |
index_type
|
IndexType
|
size_type
|
std::make_unsigned_t<index_type> |
rank_type
|
std::size_t |
[edit] 成员对象
成员名称 | 定义 |
dynamic-extents (私有) |
一个类型为 std::array<index_type, rank_dynamic()> 的数组,它存储每个动态范围的大小。 (仅供说明的成员对象*) |
[edit] 成员函数
构造一个 extents (公有成员函数) | |
观察者 | |
[静态] |
返回一个 extents 的静态等级(公有静态成员函数) |
[静态] |
返回一个 extents 的动态等级(公有静态成员函数) |
[静态] |
返回一个 extents 在特定等级索引处的静态范围长度(公有静态成员函数) |
返回一个 extents 在特定等级索引处的动态范围长度(公有成员函数) | |
辅助程序 | |
返回范围 [ 0, i) 内的范围长度的乘积(仅供说明的成员函数*) | |
返回范围 [ i + 1, rank()) 内的范围长度的乘积(仅供说明的成员函数*) | |
将输入转换为整数类型。 (仅供说明的成员函数*) | |
(私有) |
返回在特定秩索引下方动态范围的数量。 (仅供说明的成员函数*) |
(私有) |
返回数字 `r`,使得在范围 `[`0`, ` r + 1`)` 中,对于特定参数 `i`,恰好有 `i + 1` 个动态范围。 (仅供说明的成员函数*) |
[编辑] 非成员函数
(C++23) |
比较两个 `extents` 对象在每个维度上的底层范围。 (函数) |
[编辑] 推导指南(C++23)
[编辑] 示例
此部分尚未完善。 原因: 没有示例 |
[编辑] 另请参阅
(C++11) |
获取数组类型的维度数。 (类模板) |
(C++11) |
获取数组类型沿指定维度的尺寸。 (类模板) |