C++ 命名要求: LayoutMapping (自 C++23 起)
来自 cppreference.com
LayoutMapping 控制着在 std::mdspan 中将多维索引映射到一维偏移量以处理数据。
内容 |
[编辑] 要求
如果类型 M
模拟了 copyable
和 equality_comparable
,并且以下内容为 true,则它满足 LayoutMapping。
- std::is_nothrow_move_constructible_v<M>
- std::is_nothrow_move_assignable_v<M>
- std::is_nothrow_swappable_v<M>
此外,给定以下类型和值,下表中显示的表达式有效并具有指示的语义
[编辑] 图例
类型 | 定义 |
M
|
布局映射类 |
值 | 定义 |
m | 类型(可能限定为 const)为 M 的值 |
i, j | 整数包(可能限定为 const),它们是 m.extents() 中的多维索引 |
r | (可能限定为 const)的秩索引,类型为 typename M::extents_type |
d_r | 整数包(可能限定为 const),对于该包,sizeof...(d_r) == M::extents_type::rank() 为 true,秩索引为 r 的元素等于 1,而所有其他元素都等于 0 |
[编辑] 成员类型
名称 | 类型 | 要求 |
---|---|---|
M::extents_type |
类模板 std::extents 的特化 | |
M::index_type |
typename M::extents_type::index_type | |
M::rank_type |
typename M::extents_type::rank_type | |
M::layout_type |
布局映射策略 MP ,其中 typename MP::template mapping<E> 是 M 对于某个范围类型 E |
LayoutMappingPolicy,对于该策略,M 是 MP 的映射类型 |
[编辑] 成员函数和运算符
表达式 | 返回类型 | 语义 |
---|---|---|
m.extents() | const typename M::extents_type& | 返回与关联的多维索引空间的常量引用 |
m(i...) | typename M::index_type |
|
m.required_span_size() | typename M::index_type |
|
m.is_unique() | bool | 仅当对于每个 i 和 j,其中 (i != j || ...) 为 true,m(i...) != m(j...) 为 true 时,返回 true。 [注释 1] |
m.is_exhaustive() | bool | 仅当对于范围 [ 0, m.required_span_size()) 中的所有 k,都存在一个 i 使得 m(i...) 等于 k 时,返回 true。 [注释 2] |
m.is_strided() | bool | 仅当对于 m.extents() 的每个秩索引 r,都存在一个整数 s_r,使得对于所有 i,其中 (i + d_r) 是 m.extents() 中的多维索引,m((i + d_r)...) - m(i...) 等于 s_r 时,才返回 true。 [注 3] |
m.stride(r) | typename M::index_type |
|
M::is_always_unique() | bool |
|
M::is_always_exhaustive() | bool |
|
M::is_always_strided() | bool |
|
- ↑ 即使满足条件,映射也可能返回 false。对于某些布局,可能无法有效地确定布局是否唯一。
- ↑ 与上面相同,但针对详尽的布局。
- ↑ 与上面相同,但针对步长布局。
- ↑ 即使满足条件,映射也可能返回 false。对于某些布局映射,可能无法确定每个实例是否唯一。
- ↑ 与上面相同,但针对详尽的实例。
- ↑ 与上面相同,但针对步长实例。
[编辑] 另请参见
layout_left 的布局映射 ( std::layout_left 的公共成员类模板) | |
layout_right 的布局映射 ( std::layout_right 的公共成员类模板) | |
layout_stride 的布局映射 ( std::layout_stride 的公共成员类模板) | |
layout_left_padded 的布局映射 ( std::layout_left_padded<PaddingValue> 的公共成员类模板) | |
layout_right_padded 的布局映射 ( std::layout_right_padded<PaddingValue> 的公共成员类模板) |