Namensräume
Varianten
Aktionen

std::chrono::is_clock

Von cppreference.com
< cpp‎ | chrono
 
 
 
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

  • T::rep
  • T::period
  • T::duration
  • T::time_point
  • 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

#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() {}