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) |
operator() возвращает копию аргумента.std::chrono::sys_time и std::chrono::utc_time: operator() вызывает std::chrono::utc_clock::to_sys и std::chrono::utc_clock::from_sys, соответственно.std::chrono::sys_time и из него, когда Clock поддерживает from_sys и to_sys: operator() вызывает Clock::to_sys и Clock::from_sys, соответственно.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 к целевому таймеру.
t без изменений.std::chrono::utc_clock::to_sys(t).std::chrono::utc_clock::from_sys(t).Clock::from_sys(t). Этот перегрузчик участвует в разрешении перегрузки только в том случае, если выражение Clock::from_sys(t) имеет смысл. Программа некорректна, если Clock::from_sys(t) не возвращает std::chrono::time_point<Clock, Duration>, где Duration — некоторая корректная специализация std::chrono::duration.Clock::to_sys(t). Этот перегрузчик участвует в разрешении перегрузки только в том случае, если выражение Clock::to_sys(t) имеет смысл. Программа некорректна, если Clock::to_sys(t) не возвращает std::chrono::sys_time<Duration>, где Duration — некоторая корректная специализация std::chrono::duration.Clock::from_utc(t). Этот перегрузчик участвует в разрешении перегрузки только в том случае, если выражение Clock::from_utc(t) имеет смысл. Программа некорректна, если Clock::from_utc(t) не возвращает std::chrono::time_point<Clock, Duration>, где Duration — некоторая корректная специализация std::chrono::duration.Clock::to_utc(t). Этот перегрузчик участвует в разрешении перегрузки только в том случае, если выражение Clock::to_utc(t) имеет смысл. Программа некорректна, если Clock::to_utc(t) не возвращает std::chrono::utc_time<Duration>, где Duration — некоторая корректная специализация std::chrono::duration.Параметры
| t | - | точка времени для преобразования |
Возвращаемое значение
Результат преобразования, как описано выше:
t.Clock::from_sys(t).Clock::to_sys(t).Clock::from_utc(t).Clock::to_utc(t). См. также
|
(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