Spec-Zone.ru › C++

std::chrono::clock_time_conversion

Определён в заголовочном файле <chrono>
template< class Dest, class Source >
struct clock_time_conversion {};
(начиная с C++20)

std::chrono::clock_time_conversion — это признак, задающий способ преобразования std::chrono::time_point часов Source в Dest часов. Он делает это, предоставляя вызываемый объект operator(), который принимает аргумент типа std::chrono::time_point<Source, Duration> и возвращает std::chrono::time_point<Dest, OtherDuration>, представляющий эквивалентный момент времени. Длительность возвращаемой точки времени вычисляется из исходной длительности способом, который зависит от специализации. clock_time_conversion обычно используется только косвенно, через std::chrono::clock_cast.

Программа может специализировать clock_time_conversion, если хотя бы один из параметров шаблона является определённым пользователем типом часов.

Первичный шаблон представляет собой пустую структуру. Стандарт определяет следующие специализации:

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) Преобразования в std::chrono::sys_time и из него, если Clock поддерживает from_sys и to_sys: operator() вызывает соответственно Clock::to_sys и Clock::from_sys.
8,9) Преобразования в std::chrono::utc_time и из него, если Clock поддерживает from_utc и to_utc: operator() вызывает соответственно Clock::to_utc и Clock::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>, где 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).

См. также

clock_cast
(C++20)
преобразует точки времени одних часов в точки времени других
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/clock_time_conversion

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API