名前空間
変種
操作

std::readable_traits

提供: cppreference.com
< cpp‎ | iterator
 
 
イテレータライブラリ
イテレータコンセプト
イテレータプリミティブ
イテレータアダプタ
ストリームイテレータ
イテレータのカスタマイゼーションポイント
イテレータ操作
(C++11)
(C++11)
範囲アクセス
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
ヘッダ <iterator> で定義
template< class I >
struct readable_traits { };
(1) (C++20以上)
template< class T >
struct readable_traits<T*>;
(2) (C++20以上)
template< class I >

  requires std::is_array_v<I>

struct readable_traits<I>;
(3) (C++20以上)
template< class T >
struct readable_traits<const T> : value_type<T> { };
(4) (C++20以上)
template <class T>

  requires requires { typename T::value_type; }

struct readable_traits<T>;
(5) (C++20以上)
template <class T>

  requires requires { typename T::element_type; }

struct readable_traits<T>;
(6) (C++20以上)

I の関連する値型 (もしあれば) を計算します。 ユーザはプログラム定義の型に対して readable_traits を特殊化しても構いません。

1) プライマリテンプレートは空の構造体です。
2) ポインタに対する特殊化。 T がオブジェクト型の場合は std::remove_cv_t<T> に等しいメンバ型 value_type を提供します。 そうでなければメンバ value_type は存在しません。
3) 配列型に対する特殊化。 std::remove_cv_t<std::remove_extent_t<I>> に等しいメンバ型 value_type を提供します。
4) const 修飾された型に対する特殊化。
5) パブリックかつアクセス可能なメンバ型 value_type を定義している型に対する特殊化。 T::value_type がオブジェクト型の場合は std::remove_cv_t<typename T::value_type> に等しいメンバ型 value_type を提供します。 そうでなければメンバ value_type は存在しません。
6) パブリックかつアクセス可能なメンバ型 element_type を定義している型 (例えば std::shared_ptr) に対する特殊化。 T::element_type がオブジェクト型の場合は std::remove_cv_t<typename T::element_type> に等しいメンバ型 value_type を提供します。 そうでなければメンバ value_type は存在しません。

[編集] ノート

型が value_type メンバと element_type メンバの両方を持っている場合、特殊化 (5)(6) は曖昧です。

value_type はイテレータなどの readable 型と共に使用することが意図されています。 範囲と共に使用することは意図されていません。

[編集]

[編集] 関連項目

型が * 演算子を適用することによって読み込み可能であることを指定します
(コンセプト) [edit]
イテレータの関連型を計算します
(エイリアステンプレート) [edit]
イテレータの性質への統一されたインタフェースを提供します
(クラステンプレート) [edit]