std::chrono::clock_time_conversion_C++中文网

std::chrono::clock_time_conversion 是特性类,指定如何转换 Source 时钟的 std::chrono::time_pointDest 时钟的时间点。它通过提供 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_timestd::chrono::utc_time 间的转换: operator() 分别调用 std::chrono::utc_clock::to_sysstd::chrono::utc_clock::from_sys

6-7) Clock 支持 from_systo_sys 时,来自和到 std::chrono::sys_time 的转换: operator() 分别调用 Clock::to_sysClock::from_sys

8-9) Clock 支持 from_utcto_utc 时,来自和到 std::chrono::utc_time 的转换: operator() 分别调用 Clock::to_utcClock::from_utc

成员函数

每个特化都有隐式声明的默认构造函数、复制构造函数、移动构造函数、复制赋值运算符、移动赋值运算符和析构函数。

std::chrono::clock_time_conversion::operator()

template <class Duration>

std::chrono::time_point<Clock, Duration>

    operator()(const std::chrono::time_point<Clock, Duration>& t) const;

(1) (特化 (1) 的成员)

template <class Duration>

std::chrono::sys_time<Duration>

    operator()(const std::chrono::sys_time<Duration> & t) const;

(2) (特化 (2) 的成员)

template <class Duration>

std::chrono::utc_time<Duration>

    operator()(const std::chrono::utc_time<Duration>& t) const;

(3) (特化 (3) 的成员)

template <class Duration>

std::chrono::sys_time<Duration>

    operator()(const std::chrono::utc_time<Duration>& t) const;

(4) (特化 (4) 的成员)

template <class Duration>

std::chrono::utc_time<Duration>

    operator()(const std::chrono::sys_time<Duration>& t) const;

(5) (特化 (5) 的成员)

template <class Duration>

auto operator()(const std::chrono::sys_time<Duration>& t) const

    -> decltype(Clock::from_sys(t));

(6) (特化 (6) 的成员)

template <class Duration>

auto operator()(const std::chrono::time_point<SourceClock, Duration>& t) const

    -> decltype(Clock::to_sys(t));

(7) (特化 (7) 的成员)

template <class Duration>

auto operator()(const std::chrono::utc_time<Duration>& t) const

        -> decltype(Clock::from_utc(t));

(8) (特化 (8) 的成员)

template <class Duration>

auto operator()(const std::chrono::time_point<Clock, Duration>& t) const

        -> decltype(Clock::to_utc(t));

(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> ,其中 Durationstd::chrono::duration 的某个合法特化,则程序为病式。

7) 返回 Clock::to_sys(t) 。此重载仅若表达式 Clock::to_sys(t) 为良式才参与重载决议。若 Clock::to_sys(t) 不返回 std::chrono::sys_time<Duration> ,其中 Durationstd::chrono::duration 的某个合法特化,则程序为病式。

8) Returns Clock::from_utc(t) 。此重载仅若表达式 Clock::from_utc(t) 为良式才参与重载决议。若 Clock::from_utc(t)不返回 std::chrono::time_point<Clock, Duration> ,其中 Durationstd::chrono::duration 的某个合法特化,则程序为病式。

9) 返回 Clock::to_utc(t) 。此重载仅若表达式 Clock::to_utc(t) 为良式才参与重载决议。若 Clock::to_utc(t) 不返回 std::chrono::utc_time<Duration> ,其中 Durationstd::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)

参阅