std::experimental::ranges::value_type
Von cppreference.com
< cpp | experimental | ranges
| Definiert 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) | |
Berechnet den zugehörigen Werttyp des Typs I, falls vorhanden. Benutzer können value_type für einen programldefinierten Typ spezialisieren.
1) Primäre Template ist eine leere Struktur.
2) Spezialisierung für Zeiger. Wenn
T ein Objekttyp ist, wird ein Mitgliedstyp type bereitgestellt, der gleich std::remove_cv_t<T> ist. Andernfalls gibt es kein Mitglied type.3) Spezialisierung für Array-Typen.
4) Spezialisierung für const-qualifizierte Typen.
5) Spezialisierung für Typen, die einen öffentlichen und zugänglichen Mitgliedstyp
value_type definieren. Wenn T::value_type ein Objekttyp ist, wird ein Mitgliedstyp type bereitgestellt, der gleich T::value_type ist. Andernfalls gibt es kein Mitglied type.6) Spezialisierung für Typen, die einen öffentlichen und zugänglichen Mitgliedstyp
element_type definieren (z. B. std::shared_ptr). Wenn T::element_type ein Objekttyp ist, wird ein Mitgliedstyp type bereitgestellt, der gleich std::remove_cv_t<typename T::element_type> ist. Andernfalls gibt es kein Mitglied type.Inhalt |
[bearbeiten] Hilfs-Alias-Template
| template< class T > using value_type_t = typename ranges::value_type<T>::type; |
(Ranges TS) | |
[bearbeiten] Hinweise
Wenn ein Typ sowohl ein value_type-Mitglied als auch ein element_type-Mitglied enthält, sind die Spezialisierungen (5) und (6) mehrdeutig.
value_type ist für die Verwendung mit Readable-Typen wie Iteratoren vorgesehen. Es ist nicht für die Verwendung mit Bereichen vorgesehen.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
spezifiziert, dass ein Typ durch Anwenden des Operators * lesbar ist(concept) | |
| Kompatibilitäts-Traits-Klasse, die die zugehörigen Typen eines Iterators sammelt (Alias-Vorlage) |