std::chrono::clock_time_conversion_C++中文网
std::chrono::clock_time_conversion 是特性类,指定如何转换 Source 时钟的 std::chrono::time_point 到 Dest 时钟的时间点。它通过提供 const 可调用的,接受 std::chrono::time_point<Source, Duration> 类型参数并返回表示等价时间点的 std::chrono::time_point<Dest, OtherDuration> 的 operator() 进行转换。以对每个特化有所变化的方式,计算返回时间点的时长。通常只通过 std::chrono::clock_cast 间接使用 clock_time_conversion 。
程序可以特化 clock_time_conversion ,若至少一个模板形参是用户定义类型。
初等模板是空 struct 。标准定义下列特化:
| template<class Clock> struct clock_time_conversion<Clock, Clock>; |
(1) | (C++20 起) |
| template<> struct clock_time_conversion<std::chrono::system_clock, std::chrono::system_clock>; |
(2) | (C++20 起) |
| template<> struct clock_time_conversion<std::chrono::utc_clock, std::chrono::utc_clock>; |
(3) | (C++20 起) |
| template<> struct clock_time_conversion<std::chrono::system_clock, std::chrono::utc_clock>; |
(4) | (C++20 起) |
| template<> struct clock_time_conversion<std::chrono::utc_clock, std::chrono::system_clock>; |
(5) | (C++20 起) |
| template<class Clock> struct clock_time_conversion<Clock, std::chrono::system_clock>; |
(6) | (C++20 起) |
| template<class Clock> struct clock_time_conversion<std::chrono::system_clock, Clock>; |
(7) | (C++20 起) |
| template<class Clock> struct clock_time_conversion<Clock, std::chrono::utc_clock>; |
(8) | (C++20 起) |
| template<class Clock> struct clock_time_conversion<std::chrono::utc_clock, Clock>; |
(9) | (C++20 起) |
1-3) 恒等转换: operator() 返回参数的副本。
4-5) std::chrono::sys_time 与 std::chrono::utc_time 间的转换: operator() 分别调用 std::chrono::utc_clock::to_sys 和 std::chrono::utc_clock::from_sys 。
6-7) Clock 支持 from_sys 和 to_sys 时,来自和到 std::chrono::sys_time 的转换: operator() 分别调用 Clock::to_sys 和 Clock::from_sys 。
8-9) Clock 支持 from_utc 和 to_utc 时,来自和到 std::chrono::utc_time 的转换: operator() 分别调用 Clock::to_utc 和 Clock::from_utc 。
成员函数
每个特化都有隐式声明的默认构造函数、复制构造函数、移动构造函数、复制赋值运算符、移动赋值运算符和析构函数。
std::chrono::clock_time_conversion::operator()
| template <class Duration> std::chrono::time_point<Clock, Duration> |
(1) | (特化 (1) 的成员) |
| template <class Duration> std::chrono::sys_time<Duration> |
(2) | (特化 (2) 的成员) |
| template <class Duration> std::chrono::utc_time<Duration> |
(3) | (特化 (3) 的成员) |
| template <class Duration> std::chrono::sys_time<Duration> |
(4) | (特化 (4) 的成员) |
| template <class Duration> std::chrono::utc_time<Duration> |
(5) | (特化 (5) 的成员) |
| template <class Duration> auto operator()(const std::chrono::sys_time<Duration>& t) const |
(6) | (特化 (6) 的成员) |
| template <class Duration> auto operator()(const std::chrono::time_point<SourceClock, Duration>& t) const |
(7) | (特化 (7) 的成员) |
| template <class Duration> auto operator()(const std::chrono::utc_time<Duration>& t) const |
(8) | (特化 (8) 的成员) |
| template <class Duration> auto operator()(const std::chrono::time_point<Clock, Duration>& t) const |
(9) | (特化 (9) 的成员) |
转换参数 std::chrono::time_point 为目标时钟。
1-3) 恒等转换。返回不更改的 t 。
4) 返回 std::chrono::utc_clock::to_sys(t) 。
5) 返回 std::chrono::utc_clock::from_sys(t) 。
6) 返回 Clock::from_sys(t) 。此重载仅若表达式 Clock::from_sys(t) 为良式才参与重载决议。若 Clock::from_sys(t) 不返回 std::chrono::time_point<Clock, Duration> ,其中 Duration 是 std::chrono::duration 的某个合法特化,则程序为病式。
7) 返回 Clock::to_sys(t) 。此重载仅若表达式 Clock::to_sys(t) 为良式才参与重载决议。若 Clock::to_sys(t) 不返回 std::chrono::sys_time<Duration> ,其中 Duration 是 std::chrono::duration 的某个合法特化,则程序为病式。
8) Returns Clock::from_utc(t) 。此重载仅若表达式 Clock::from_utc(t) 为良式才参与重载决议。若 Clock::from_utc(t)不返回 std::chrono::time_point<Clock, Duration> ,其中 Duration 是 std::chrono::duration 的某个合法特化,则程序为病式。
9) 返回 Clock::to_utc(t) 。此重载仅若表达式 Clock::to_utc(t) 为良式才参与重载决议。若 Clock::to_utc(t) 不返回 std::chrono::utc_time<Duration> ,其中 Duration 是 std::chrono::duration 的某个合法特化,则程序为病式。
参数
返回值
上述的转换结果:
1-3) t 。
4) std::chrono::utc_clock::to_sys(t) 。
5) std::chrono::utc_clock::from_sys(t) 。
6) Clock::from_sys(t) 。
7) Clock::to_sys(t) 。
8) Clock::from_utc(t) 。
9) Clock::to_utc(t) 。