命名空间
变体
操作

std::chrono::is_clock

来自 cppreference.com
< cpp‎ | chrono
 
 
工具库
语言支持
类型支持 (基本类型, RTTI)
库特性测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三元比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
 
在头文件 <chrono> 中定义
template< class T >
struct is_clock;
(自 C++20 起)

如果 T 满足 Clock 需求,则提供成员常量 value 等于 true。对于任何其他类型,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 >
constexpr bool is_clock_v = is_clock<T>::value;
(自 C++20 起)

std::integral_constant 继承而来

成员常量

value
[静态]
true 如果 T 满足 Clock 需求,则为 false,否则为
(公有静态成员常量)

成员函数

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

成员类型

类型 定义
value_type bool
type std::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; // type is not checked
            T::now();     // return type is not checked
        }
struct is_clock<T> : std::true_type {};

[编辑] 备注

如果 T 满足 Clock 需求,但 T::is_steady 的类型不是 const bool,或 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() {}