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 если хотя бы один из параметров шаблона является типом таймера, определенным пользователем.

Основной шаблон — это пустой 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) Преобразования к 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/w/cpp/chrono/clock_time_conversion

Spec-Zone.ru

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