std::chrono::clock_time_conversion
来自cppreference.com
<tbody>
</tbody>
| 在标头 <chrono> 定义
|
||
template< class Dest, class Source > struct clock_time_conversion {}; |
(C++20 起) | |
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。
主模板是空结构体。标准定义了下列特化:
<tbody> </tbody> 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()
<tbody> </tbody> template< class Duration > std::chrono::time_point<Clock, Duration> operator()( const std::chrono::time_point<Clock, Duration>& t ) const; |
(1) | (member of specialization (1)) |
template< class Duration > std::chrono::sys_time<Duration> operator()( const std::chrono::sys_time<Duration> & t ) const; |
(2) | (member of specialization (2)) |
template< class Duration > std::chrono::utc_time<Duration> operator()( const std::chrono::utc_time<Duration>& t ) const; |
(3) | (member of specialization (3)) |
template< class Duration > std::chrono::sys_time<Duration> operator()( const std::chrono::utc_time<Duration>& t ) const; |
(4) | (member of specialization (4)) |
template< class Duration > std::chrono::utc_time<Duration> operator()( const std::chrono::sys_time<Duration>& t ) const; |
(5) | (member of specialization (5)) |
template< class Duration > auto operator()( const std::chrono::sys_time<Duration>& t ) const -> decltype(Clock::from_sys(t)); |
(6) | (member of specialization (6)) |
template< class Duration > auto operator()( const std::chrono::time_point<SourceClock, Duration>& t ) const -> decltype(Clock::to_sys(t)); |
(7) | (member of specialization (7)) |
template< class Duration > auto operator()( const std::chrono::utc_time<Duration>& t ) const -> decltype(Clock::from_utc(t)); |
(8) | (member of specialization (8)) |
template< class Duration > auto operator()( const std::chrono::time_point<Clock, Duration>& t ) const -> decltype(Clock::to_utc(t)); |
(9) | (member of specialization (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) 返回
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 的某个合法特化,则程序非良构。参数
| t | - | 要转化的时间点 |
返回值
上述的转换结果:
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)。
参阅
(C++20) |
转换一个时钟的时间点为另一个 (函数模板) |