std::experimental::ranges::value_type
From cppreference.com
< cpp | experimental | ranges
| Defined in header <experimental/ranges/iterator> |
||
| template< class I > struct value_type {}; |
(1) | |
| template< class T > struct value_type<T*>; |
(2) | |
| template< class I > requires std::is_array<I>::value |
(3) | |
| template< class T > struct value_type<const T> : value_type<std::decay_t<T>> {}; |
(4) | |
| template< class T > requires requires { typename T::value_type; } |
(5) | |
| template< class T > requires requires { typename T::element_type; } |
(6) | |
型Iに関連付けられた値型を計算します(存在する場合)。ユーザーは、プログラム定義型に対してvalue_typeを特殊化できます。
1) プライマリテンプレートは空の構造体です。
2) ポインタの特殊化。
Tがオブジェクト型の場合、std::remove_cv_t<T>に等しいメンバ型typeを提供します。それ以外の場合は、メンバtypeはありません。3) 配列型の特殊化。
4) const修飾型の特殊化。
5) 公開されアクセス可能なメンバ型
value_typeを定義する型の特殊化。T::value_typeがオブジェクト型の場合、T::value_typeに等しいメンバ型typeを提供します。それ以外の場合は、メンバtypeはありません。6) 公開されアクセス可能なメンバ型
element_typeを定義する型(例:std::shared_ptr)の特殊化。T::element_typeがオブジェクト型の場合、std::remove_cv_t<typename T::element_type>に等しいメンバ型typeを提供します。それ以外の場合は、メンバtypeはありません。目次 |
[編集] ヘルパーエイリアステンプレート
| template< class T > using value_type_t = typename ranges::value_type<T>::type; |
(ranges TS) | |
[編集] 注記
型がvalue_typeメンバとelement_typeメンバの両方を含む場合、特殊化(5)と(6)は曖昧になります。
value_typeは、イテレータのようなReadable型との使用を目的としています。範囲との使用を目的としていません。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
演算子 * を適用することで読み取り可能であることを指定します。(concept) | |
| イテレータの関連型を収集する互換性トレイトクラス。 (alias template) |