Non-propagating cache (C++20)
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(C++20以降)
( 説明専用* ) |
|
一部の範囲アダプタ、例えば
ranges::join_view
や
ranges::lazy_split_view
は、説明専用のクラステンプレート
non-propagating-cache
で定義される値(例えばイテレータ)を条件付きで格納します。
このラッパーは std:: optional < T > と完全に同じ動作をしますが、以下の点が異なります:
- コピー構築または代入時にソースの値をコピーしません、
- ムーブ元のソースの値をリセットします、
- 代入時に自身の値をリセットします、そして
- さらに、入力ビューが反復処理される際に値を一時的にキャッシュできるようにするメンバー関数テンプレートを提供します。
ラッパーは値を含むキャッシュをカプセル化します。キャッシュのクリアは、含まれる値をリセットする操作と同等です。この操作は、ラッパーをコピーまたは移動する際に実行されます。
目次 |
テンプレートパラメータ
| T | - | 格納される値の型。オブジェクト型でなければならない |
メンバー関数
コピーコンストラクタとムーブコンストラクタ
|
constexpr
/*non-propagating-cache*/
( const /*non-propagating-cache*/ & ) noexcept { } |
(1) | (C++20以降) |
|
constexpr
/*non-propagating-cache*/
( /*non-propagating-cache*/ && other ) noexcept { other. reset ( ) ; } |
(2) | (C++20以降) |
コピー代入演算子とムーブ代入演算子
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
const
/*non-propagating-cache*/
&
other
)
noexcept
|
(1) | (C++20以降) |
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
/*non-propagating-cache*/
&&
other
)
noexcept
|
(2) | (C++20以降) |
non-propagating-cache
<T>::
emplace-deref
|
template
<
class
I
>
constexpr T & /*emplace-deref*/ ( const I & i ) ; |
(C++20以降)
( 説明専用* ) |
|
格納されている値を 直接初期化 (ただし直接リスト初期化ではない)によって * i で初期化します。呼び出し前に * this が既に値を保持している場合、 reset ( ) が呼び出されます。
新しく格納された値への参照を返します。
ある考案された変数
t
に対して宣言
T t
(
*
i
)
;
が適格でない場合、プログラムは不適格です。
*
i
が
T
の(CV修飾可能性のある)prvalueである場合、移動可能である必要はありません。
std::optionalと同一のメンバー
メンバー関数
optional
オブジェクトを構築する
(
std::optional<T>
の公開メンバー関数)
|
|
|
含まれている値がある場合、それを破棄する
(
std::optional<T>
の公開メンバー関数)
|
|
|
内容を代入する
(
std::optional<T>
の公開メンバー関数)
|
|
オブザーバー |
|
|
含まれている値にアクセスする
(
std::optional<T>
の公開メンバー関数)
|
|
|
オブジェクトが値を含んでいるかどうかをチェックする
(
std::optional<T>
の公開メンバー関数)
|
|
モディファイア |
|
|
含まれている値を破棄する
(
std::optional<T>
の公開メンバー関数)
|
|
|
含まれている値をその場で構築する
(
std::optional<T>
の公開メンバー関数)
|
|
注記
non-propagating-cache
は実装において、
begin
(
)
の結果をキャッシュするために使用され、このメソッドの償却定数時間計算量を提供します。
関連項目
|
(C++20)
|
view
の
range
s
からなる
view
を平坦化して得られるシーケンスからなる
view
(クラステンプレート) (range adaptor object) |
rangeのviewを平坦化して得られるシーケンスからなる
view
(要素間に区切り文字を含む)
(クラステンプレート) (range adaptor object) |
|
|
(C++20)
|
区切り文字を使用して別の
view
を分割して得られる部分rangeからなる
view
(クラステンプレート) (range adaptor object) |
区切り文字を使用して別の
view
を分割して得られる部分rangeからなる
view
(クラステンプレート) (range adaptor object) |
|
|
(C++23)
|
別の
view
の要素のNサイズの非重複連続チャンクである
view
s
のrange
(クラステンプレート) (range adaptor object) |