std::meta::reflect_constant_array
| Definiert im Header <meta>
|
||
template< ranges::input_range R >
consteval std::meta::info reflect_constant_array( R&& r );
|
(seit C++26) | |
Gibt eine Reflexion zurück, die ein Array-Objekt darstellt, dessen Elemente die entsprechenden Elemente von r sind.
Das resultierende Objekt ist ein Template-Parameter-Objekt: es hat eine statische Speicherdauer, und Bereiche mit template-argument-äquivalenten Inhalten entsprechen demselben Objekt.
Wenn die Größe von r nicht Null ist, ist das resultierende Array-Objekt ein potenziell nicht eindeutiges Objekt.
Sei U sei ranges::range_value_t<R> und T sei std::remove_all_extents_t<U>.
Das Programm ist fehlerhaft, wenn eine der folgenden Bedingungen zutrifft:
Tist kein struktureller Typ.Terfüllt nicht copy_constructible.Uist kein Array-Typ, undstd::is_constructible_v<T, ranges::range_reference_t<R>>ist falsch.
Parameter
| r | - | ein input_range |
Rückgabewert
Wenn die Größe von r nicht Null ist, eine Reflexion, die ein Template-Parameter-Objekt vom Typ const T[N] (wobei N die Größe von r). Jedes Element des Template-Parameter-Objekts ist template-argument-äquivalent zu:
std::meta::reflect_constant_array(*it)fallsUein Array-Typ ist;std::meta::reflect_constant(static_cast<T>(*it))andernfalls;
wobei it ein Iterator zum entsprechenden Element von r ist.
Andernfalls (die Größe von r ist Null), eine Reflexion, die das Template-Parameter-Objekt vom Typ const std::array<T, 0> initialisiert mit {} darstellt.
Ausnahmen
Wirft jede Ausnahme, die von Folgendem geworfen wird:
- eine Operation auf
roder auf Iteratoren oder Sentinels vonr; - jedes Argument von
std::meta::reflect_constantoder jeder Aufruf vonstd::meta::reflect_constant_arraywie oben beschrieben.
Wirft std::meta::exception falls ein Aufruf von std::meta::reflect_constant über eine Ausnahme beendet würde.
Hinweise
Das Ergebnis von std::meta::reflect_constant_array ist zur Verwendung mit std::meta::substitute geeignet. Wenn der Aufrufer einen std::span eines statischen Arrays im Gegensatz zu einem Reflexionswert wünscht, ist std::define_static_array normalerweise besser geeignet.
Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
Siehe auch
(C++26) |
wandelt ein Kompilierzeit-Array in statischen Speicher um und gibt einen Span des statischen Arrays zurück (Funktionstemplate) |
(C++26) |
wandelt eine Kompilierzeit-Zeichenkette in statischen Speicher um und gibt eine Reflexion zurück, die die statische Zeichenkette darstellt (Funktionstemplate) |
(C++26) |
gibt eine Reflexion zurück, die einen Wert oder ein Template-Parameter-Objekt darstellt, geeignet zur Verwendung als konstantes Template-Argument (Funktionstemplate) |