Namespaces
Variants

非伝播キャッシュ (C++20)

ja.cppreference.net より
 
 
Ranges ライブラリ
Range アダプタ
 
template< class T >
    requires std::is_object_v<T>
class /*non-propagating-cache*/;
(C++20以降)
(説明専用*)

一部の Range アダプタ (例: ranges::join_view や ranges::lazy_split_view) は、説明専用のクラステンプレート non-propagating-cache の観点で指定された値 (例: イテレータ) を条件付きで格納します。

このラッパーは std::optional<T> とまったく同様に動作します。ただし、以下の点が異なります:

  • コピー構築またはコピー代入されたときに、元の値のコピーを行わないこと、
  • ムーブ元からのムーブが行われたときに、元の値をリセットすること、
  • 代入されたときに、自身の値をリセットすること、
  • さらに、入力 view が反復される際に一時的に値をキャッシュするためのメンバ関数テンプレートを追加で提供することです。

このラッパーは値を含むキャッシュをカプセル化します。キャッシュのクリアは、含まれる値のリセットと同等の操作です。このような操作は、ラッパーのコピーまたはムーブ時に行われます。

テンプレートパラメータ

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以降)
1) コピーコンストラクタは何も効果を持たない。
2) ムーブコンストラクタは other のキャッシュをクリアする。

コピー代入演算子とムーブ代入演算子

constexpr /*non-propagating-cache*/ &

operator = ( const /*non-propagating-cache*/ & other ) noexcept
{
if ( std:: addressof ( other ) ! = this )
reset ( ) ;
return * this ;

}
(1) (C++20以降)
constexpr /*non-propagating-cache*/ &

operator = ( /*non-propagating-cache*/ && other ) noexcept
{
reset ( ) ;
other. reset ( ) ;
return * this ;

}
(2) (C++20以降)
1) コピー代入演算子は * this のキャッシュをクリアします。
2) ムーブ代入演算子は * this と other の両方のキャッシュをクリアします。

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 ( ) の結果をキャッシュするために使用され、このメソッドの償却定数時間計算量を提供します。

関連項目

view の range s からなる view を平坦化して得られるシーケンスからなる view
(クラステンプレート) (range adaptor object)
rangeのviewを平坦化して得られるシーケンスからなる view (要素間に区切り文字を含む)
(クラステンプレート) (range adaptor object)
区切り文字を使用して別の view を分割して得られる部分rangeからなる view
(クラステンプレート) (range adaptor object)
区切り文字を使用して別の view を分割して得られる部分rangeからなる view
(クラステンプレート) (range adaptor object)
別の view の要素のNサイズの非重複連続チャンクである view s のrange
(クラステンプレート) (range adaptor object)