C++ 名前付き要件: AccessorPolicy (C++23 以降)
From cppreference.com
AccessorPolicy は、特定のデータハンドルとインデックスから要素にアクセスする方法を定義します。std::mdspan のポリシーとして使用され、基になる 1D インデックスを使用して要素の参照へのアクセスを指定します。
目次 |
[編集] 要件
型 A が AccessorPolicy を満たすのは、それが copyable をモデル化し、かつ以下が true である場合です。
- std::is_nothrow_move_constructible_v<A>
- std::is_nothrow_move_assignable_v<A>
- std::is_nothrow_swappable_v<A>
そして、以下の型と値が与えられた場合、以下の表に示す式は有効であり、示された意味を持ちます。
[編集] 凡例
| 型 | 定義 |
A
|
アクセサポリシー型 |
OP
|
オフセットポリシー型 |
| 値 | 定義 |
| a | 型 A (const 修飾子付きの場合あり) の値 |
| p | 型 A::data_handle_type (const 修飾子付きの場合あり) の値 |
| i, j, n | 型 std::size_t の値 |
[編集] メンバ型
| 名前 | 型 | 要件 |
|---|---|---|
A::element_type |
(未指定) |
|
A::data_handle_type |
(未指定) ただし、型は element_type* である必要はありません。 |
|
A::reference |
(未指定) ただし、型は element_type& である必要はありません。 |
|
A::offset_policy |
OP |
|
[編集] メンバ関数
| Expression | 戻り値の型 | セマンティクス |
|---|---|---|
| a.access(p, i) | typename A::reference |
|
| a.offset(p, i) | typename A::offset_policy::data_handle_type |
|
- ↑ インデックスの範囲
[0,N)は、指定されたデータハンドルとアクセサの「アクセス可能な範囲」です。もし範囲内の各インデックスについて、access メンバ関数が要素への有効な参照を生成する場合です。
[編集] 標準ライブラリ
以下の標準ライブラリ型は AccessorPolicy の要件を満たします。
| (C++23) |
mdspan の要素へのインデックス付きアクセスのための型(class template) |
| (C++26) |
mdspan の要素へのアラインメントされたアクセスのための型(class template) |
| 名前空間
std::linalg で定義 | |
| (C++26) |
参照が、固定されたスケーリング因子とネストされた std::mdspan アクセッサの参照との積を表す std::mdspan アクセッサポリシー (クラステンプレート) |
| (C++26) |
参照が、ネストされた std::mdspan アクセッサの参照の複素共役を表す std::mdspan アクセッサポリシー (クラステンプレート) |