clock_time_conversion
结构
一种特征,指定如何在保持等效时间点的同时,将 time_point
从一种类型的时钟转换为另一种类型。
语法
// C++20
1) template<class Dest, class Source> struct clock_time_conversion {};
2) template<class Clock> struct clock_time_conversion<Clock, Clock>;
3) template<> struct clock_time_conversion<system_clock, system_clock>;
4) template<> struct clock_time_conversion<utc_clock, utc_clock>;
5) template<> struct clock_time_conversion<system_clock, utc_clock>;
6) template<> struct clock_time_conversion<utc_clock, system_clock>;
7) template<class Clock> struct clock_time_conversion<Clock, system_clock>;
8) template<class Clock> struct clock_time_conversion<system_clock, Clock>;
9) template<class Clock> struct clock_time_conversion<Clock, utc_clock>;
10) template<class Clock> struct clock_time_conversion<utc_clock, Clock>;
模板参数
Clock
要转换/转换为的时钟类型。
Dest
要转换为的时钟类型。
Source
要转换的时钟类型。
特征提供以下转换:
1) 一个空结构,仅为实现专用化而定义。
2-4) 标识转换。 返回传入的同一时钟。
5-6) 在 sys_time
和 utc_time
之间转换,调用 utc_clock::to_sys
或 utc_clock::from_sys
,具体取决于转换的方向。
7-8) 在 sys_time
和指定时钟之间转换(指定时钟支持 to_sys
和 from_sys
时),导致对 Clock::to_sys
或 Clock::from_sys
的调用,具体取决于转换的方向。
9-10) 在utc_time
指定的时钟支持to_sys
from_utc
和指定时钟之间转换时,会根据转换的方向调用Clock::to_utc
或Clock::from_utc
转换。
成员
名称 | 描述 |
---|---|
operator () |
将 time_point 从一个时钟转换为另一个时钟。 |
注解
通常不会直接在代码中使用此特征。 clock_cast
转换函数使用此特征。
要求
标头<chrono
>:
命名空间:std::chrono
编译器选项: /std:c++latest
operator()
在保持等效时间点的同时,将 time_point
从一种时钟类型转换为另一种时钟类型。
语法
1)
template <class Duration>
time_point<Clock, Duration> operator()(const time_point<Clock, Duration>& t) const;
2)
template <class Duration>
sys_time<Duration> operator()(const sys_time<Duration> & t) const;
3)
template <class Duration>
utc_time<Duration> operator()(const utc_time<Duration>& t) const;
4)
template <class Duration>
sys_time<Duration> operator()(const utc_time<Duration>& t) const;
5)
template <class Duration>
utc_time<Duration> operator()(const sys_time<Duration>& t) const;
参数
t
要转换的 time_point
。
返回值
1-3) 标识转换。 不进行转换。 返回 t
,不进行任何更改。
4) 返回 utc_clock::to_sys(t)
。
5) 返回 utc_clock::from_sys(t)
。
推导指南
针对 template <class Duration> operator()
提供以下推导指南:
1)
template <class Duration> auto operator()(const sys_time<Duration>& t) const
-> decltype(Clock::from_sys(t));
2)
template <class Duration> auto operator()(const time_point<SourceClock, Duration>& t) const
-> decltype(Clock::to_sys(t));
3)
template <class Duration> auto operator()(const utc_time<Duration>& t) const
-> decltype(Clock::from_utc(t));
4)
template <class Duration> auto operator()(const time_point<Clock, Duration>& t) const
-> decltype(Clock::to_utc(t));
1) 仅当 Clock
支持 from_sys()
并返回 time_point<Clock, Duration>
时,参与重载决策。
2) 仅当 Clock
支持 to_sys()
并返回 sys_time<Duration>
时,参与重载决策。
3) 仅当 Clock
支持 from_utc()
并返回 time_point<Clock, Duration>
时,参与重载决策。
4) 仅当 Clock
支持 to_utc()
并返回 utc_time<Duration>
时,参与重载决策。
示例: clock_time_conversion
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
auto sd = sys_days{ 2021y / July / 26 };
auto time = clock_time_conversion<utc_clock, system_clock>{}(sd);
std::cout << time << "\n";
return 0;
}
2021-07-26 00:00:00