std::ranges:: views:: single, std::ranges:: single_view
|
Definiert im Header
<ranges>
|
||
| (1) | ||
|
template
<
std::
copy_constructible
T
>
requires
std::
is_object_v
<
T
>
|
(seit C++20)
(bis C++23) |
|
|
template
<
std::
move_constructible
T
>
requires
std::
is_object_v
<
T
>
|
(seit C++23) | |
|
namespace
views
{
inline
constexpr
/* unspecified */
single
=
/* unspecified */
;
|
(2) | (seit C++20) |
|
Aufrufsignatur
|
||
|
template
<
class
T
>
requires
/* siehe unten */
|
(seit C++20) | |
view
, die genau ein Element eines bestimmten Wertes enthält.
Die Lebensdauer des Elements ist an das übergeordnete
single_view
gebunden. Das Kopieren von
single_view
erstellt eine Kopie des Elements.
Inhaltsverzeichnis |
Customization Point Objects
Der Name
views::single
bezeichnet ein
Customization Point Object
, welches ein konstantes
Funktionsobjekt
eines
Literal
semiregular
-Klassentyps ist. Weitere Details finden Sie unter
CustomizationPointObject
.
Datenmitglieder
| Mitglied | Definition |
copyable-box
<T>
value_
(bis C++23)
|
das einzelne Element der Ansicht
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
movable-box
<T>
value_
(seit C++23)
|
das einzelne Element der Ansicht
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
Memberfunktionen
konstruiert einen
single_view
(öffentliche Elementfunktion) |
|
|
gibt einen Zeiger auf das Element zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Zeiger hinter das Element zurück
(öffentliche Elementfunktion) |
|
|
[static]
|
gibt
false
zurück
(öffentliche statische Elementfunktion) |
|
[static]
|
gibt
1
zurück
(öffentliche statische Elementfunktion) |
|
gibt einen Zeiger auf das Element zurück
(öffentliche Elementfunktion) |
|
Geerbt von std::ranges::view_interface |
|
|
(C++23)
|
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
(C++23)
|
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur wenn
ranges::empty
darauf anwendbar ist
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie
forward_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
bidirectional_range
und
common_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das
n
te
Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
random_access_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
std::ranges::single_view:: single_view
|
single_view
(
)
requires
std::
default_initializable
<
T
>
=
default
;
|
(1) | (seit C++20) |
| (2) | ||
|
constexpr
explicit
single_view
(
const
T
&
t
)
;
|
(seit C++20)
(bis C++23) |
|
|
constexpr
explicit
single_view
(
const
T
&
t
)
requires std:: copy_constructible < T > ; |
(seit C++23) | |
|
constexpr
explicit
single_view
(
T
&&
t
)
;
|
(3) | (seit C++20) |
|
template
<
class
...
Args
>
requires
std::
constructible_from
<
T, Args...
>
|
(4) | (seit C++20) |
Konstruiert ein
single_view
.
value_
standardmäßig, was seinen enthaltenen Wert wertinitialisiert.
value_
mit
t
.
value_
mit
std
::
move
(
t
)
.
value_
als ob durch
value_
{
std::
in_place
,
std::
forward
<
Args
>
(
args
)
...
}
.
std::ranges::single_view:: begin
|
constexpr
T
*
begin
(
)
noexcept
;
constexpr const T * begin ( ) const noexcept ; |
(seit C++20) | |
Entspricht return data ( ) ; .
std::ranges::single_view:: end
|
constexpr
T
*
end
(
)
noexcept
;
constexpr const T * end ( ) const noexcept ; |
(seit C++20) | |
Entspricht return data ( ) + 1 ; .
std::ranges::single_view:: empty
|
static
constexpr
bool
empty
(
)
noexcept
;
|
(seit C++20) | |
Entspricht return false ; .
std::ranges::single_view:: size
|
static
constexpr
std::
size_t
size
(
)
noexcept
;
|
(seit C++20) | |
Entspricht return 1 ; .
Ermöglicht, dass
single_view
das Konzept
/*tiny-range*/
erfüllt, wie von
split_view
gefordert.
std::ranges::single_view:: data
|
constexpr
T
*
data
(
)
noexcept
;
constexpr const T * data ( ) const noexcept ; |
(seit C++20) | |
Gibt einen Zeiger auf den enthaltenen Wert von
value_
zurück. Das Verhalten ist undefiniert, wenn
value_
keinen Wert enthält.
Deduktionsanleitungen
|
template
<
class
T
>
single_view ( T ) - > single_view < T > ; |
(seit C++20) | |
Hinweise
Für eine
single_view
gibt die geerbte
empty
-Memberfunktion immer
false
zurück, und die geerbte
operator
bool
-Konvertierungsfunktion gibt immer
true
zurück.
Beispiel
#include <iomanip> #include <iostream> #include <ranges> #include <string> #include <tuple> int main() { constexpr std::ranges::single_view sv1{3.1415}; // verwendet (const T&) Konstruktor static_assert(sv1); static_assert(not sv1.empty()); std::cout << "1) *sv1.data(): " << *sv1.data() << '\n' << "2) *sv1.begin(): " << *sv1.begin() << '\n' << "3) sv1.size(): " << sv1.size() << '\n' << "4) distance: " << std::distance(sv1.begin(), sv1.end()) << '\n'; std::string str{"C++20"}; std::cout << "5) str = " << std::quoted(str) << '\n'; std::ranges::single_view sv2{std::move(str)}; // verwendet (T&&) Konstruktor std::cout << "6) *sv2.data(): " << std::quoted(*sv2.data()) << '\n' << "7) str = " << std::quoted(str) << '\n'; std::ranges::single_view<std::tuple<int, double, std::string>> sv3{std::in_place, 42, 3.14, "😄"}; // verwendet (std::in_place_t, Args&&... args) std::cout << "8) sv3 holds a tuple: { " << std::get<0>(sv3[0]) << ", " << std::get<1>(sv3[0]) << ", " << std::get<2>(sv3[0]) << " }\n"; }
Ausgabe:
1) *sv1.data(): 3.1415
2) *sv1.begin(): 3.1415
3) sv1.size(): 1
4) distance: 1
5) str = "C++20"
6) *sv2.data(): "C++20"
7) str = ""
8) sv3 holds a tuple: { 42, 3.14, 😄 }
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3428 | C++20 |
single_view
war konvertierbar von
std::in_place_t
|
der Konstruktor wurde explizit gemacht |
| LWG 4035 | C++20 |
single_view
stellte die Memberfunktion
empty()
nicht bereit
|
stellt
empty()
bereit
|
| P2367R0 | C++20 |
Deduktionsführer für
single_view
zerlegten das Argument nicht;
views::single
kopierte, aber verpackte keine
single_view
|
ein zerlegender Führer bereitgestellt;
immer verpackend gemacht |
Siehe auch
|
(C++17)
|
Ein Wrapper, der möglicherweise ein Objekt enthält oder nicht
(Klassen-Template) |
|
(C++20)
|
Eine leere
view
ohne Elemente
(Klassen-Template) (Variablen-Template) |
|
(C++20)
|
Eine
view
über die Teilbereiche, die durch Aufteilung einer anderen
view
mithilfe eines Trennzeichens erhalten werden
(Klassen-Template) (Range-Adapter-Objekt) |