std::chrono::is_clock

来自cppreference.com
< cpp‎ | chrono
 
 
 
在标头 <chrono> 定义
template<class T >
struct is_clock;
(C++20 起)

如果 T 满足时钟(Clock) ,那么提供等于 true 的成员常量 value,对于任何其他类型,valuefalse

就此特征而言,不指定实现确定类型不能满足时钟(Clock) 的其他要求,但至少保证 T 在没有满足以下所有条件时不应当有资格作为时钟(Clock)

  • T::rep
  • T::period
  • T::duration
  • T::time_point
  • T::is_steady
  • T::now()

如果程序添加了 std::is_clockstd::is_clock_v 的特化,那么行为未定义。

目录

[编辑]模板形参

T - 要检查的类型

[编辑]辅助变量模板

template<class T >
constexprbool is_clock_v = is_clock<T>::value;
(C++20 起)

继承自 std::integral_constant

成员常量

value
[静态]
如果 T 满足时钟(Clock) 要求那么是 true,否则是 false
(公开静态成员常量)

成员函数

operator bool
将对象转换到 bool,返回 value
(公开成员函数)
operator()
(C++14)
返回 value
(公开成员函数)

成员类型

类型 定义
value_typebool
typestd::integral_constant<bool, value>

[编辑]可能的实现

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;// 不检查类型 T::now();// 不检查返回类型}struct is_clock<T>:std::true_type{};

[编辑]注解

如果 T 满足了时钟(Clock) 规定,但 T::is_steady 的类型不是 constbool,或者 T::now() 的类型不是 T::time_point,那么不指明 is_clock_v<T> 的结果。

[编辑]示例

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