std::chrono::is_clock
Von cppreference.com
| Definiert in Header <chrono> |
||
| template< class T > struct is_clock; |
(seit C++20) | |
Wenn T die Clock Anforderungen erfüllt, liefert die Member-Konstante value den Wert true. Für jeden anderen Typ ist value false.
Für den Zweck dieses Traits ist der Grad, bis zu dem eine Implementierung feststellt, dass ein Typ die Clock Anforderungen nicht erfüllen kann, nicht spezifiziert, außer dass ein minimales T nicht als Clock qualifiziert wird, es sei denn, es erfüllt alle folgenden Bedingungen
- Jeder der folgenden qualifizierten Bezeichner ist gültig und bezeichnet einen Typ
-
T::rep -
T::period -
T::duration -
T::time_point
-
- Jeder der folgenden Ausdrücke ist wohlgeformt, wenn er als unevaluierter Operand behandelt wird
-
T::is_steady -
T::now()
-
Wenn das Programm Spezialisierungen für std::is_clock oder std::is_clock_v hinzufügt, ist das Verhalten undefiniert.
Inhalt |
[bearbeiten] Template-Parameter
| T | - | ein zu prüfender Typ |
[bearbeiten] Hilfsvariablen-Template
| template< class T > constexpr bool is_clock_v = is_clock<T>::value; |
(seit C++20) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
true wenn T die Clock Anforderungen erfüllt, andernfalls false(öffentliche statische Member-Konstante) |
Memberfunktionen
| operator bool |
konvertiert das Objekt zu bool, gibt value zurück (öffentliche Memberfunktion) |
| operator() (C++14) |
gibt value zurück (öffentliche Memberfunktion) |
Membertypen
| Typ | Definition |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[bearbeiten] Mögliche Implementierung
template<class> struct is_clock : std::false_type {}; template<class T> requires requires { typename T::rep; typename T::period; typename T::duration; typename T::time_point; T::is_steady; // type is not checked T::now(); // return type is not checked } struct is_clock<T> : std::true_type {}; |
[bearbeiten] Hinweise
Wenn T ansonsten die Clock Anforderungen erfüllt, aber T::is_steady keinen Typ const bool hat oder T::now() keinen Typ T::time_point hat, ist das Ergebnis von is_clock_v<T> nicht spezifiziert.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <chrono> #include <ratio> static_assert ( std::chrono::is_clock_v<std::chrono::utc_clock> and not std::chrono::is_clock_v<std::chrono::duration<int, std::exa>> ); int main() {}