std::chrono:: round (std::chrono::time_point)
|
Definiert im Header
<chrono>
|
||
|
template
<
class
ToDuration,
class
Clock,
class
Duration
>
constexpr
std::
chrono
::
time_point
<
Clock, ToDuration
>
|
(seit C++17) | |
Gibt den nächsten Zeitpunkt zu
tp
zurück, der in
ToDuration
darstellbar ist, wobei bei Halbwertsfällen zur geraden Zahl gerundet wird.
Die Funktion nimmt nicht an der Überlagerungsauflösung teil, es sei denn
ToDuration
ist eine Spezialisierung von
std::chrono::duration
und
std::
chrono
::
treat_as_floating_point_v
<
typename
ToDuration
::
rep
>
ist
false
.
Inhaltsverzeichnis |
Parameter
| tp | - | Zeitpunkt zum Runden auf den nächstgelegenen Wert |
Rückgabewert
tp
auf den nächsten Zeitpunkt gerundet mit einer Dauer vom Typ
ToDuration
, bei halben Werten wird zur geraden Zahl gerundet.
Mögliche Implementierung
namespace detail { template<class> inline constexpr bool is_duration_v = false; template<class Rep, class Period> inline constexpr bool is_duration_v< std::chrono::duration<Rep, Period>> = true; } template<class To, class Clock, class FromDuration, class = std::enable_if_t<detail::is_duration_v<To> && !std::chrono::treat_as_floating_point_v<typename To::rep>>> constexpr std::chrono::time_point<Clock, To> round( const std::chrono::time_point<Clock, FromDuration>& tp) { return std::chrono::time_point<Clock, To>{ std::chrono::round<To>(tp.time_since_epoch())}; } |
Beispiel
#include <chrono> #include <iostream> #include <string> template<typename TimePoint> std::string to_string(const TimePoint& time_point) { return std::to_string(time_point.time_since_epoch().count()); } int main() { using namespace std::literals::chrono_literals; using Sec = std::chrono::seconds; std::cout << "Time point\t" "Cast\t" "Floor\t" "Round\t" "Ceil\n"; std::cout << "(ms)\t\t" "(s)\t" "(s)\t" "(s)\t" "(s)\n"; for (const auto value_ms : {5432ms, 5678ms}) { std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> time_point_ms(value_ms); std::cout << to_string(time_point_ms) << "\t\t" << to_string(std::chrono::time_point_cast<Sec>(time_point_ms)) << '\t' << to_string(std::chrono::floor<Sec>(time_point_ms)) << '\t' << to_string(std::chrono::round<Sec>(time_point_ms)) << '\t' << to_string(std::chrono::ceil<Sec>(time_point_ms)) << '\n'; } }
Ausgabe:
Time point Cast Floor Round Ceil (ms) (s) (s) (s) (s) 5432 5 5 5 6 5678 5 5 6 6
Siehe auch
|
(C++11)
|
konvertiert einen Zeitpunkt zu einem anderen Zeitpunkt auf derselben Uhr, mit einer anderen Dauer
(Funktions-Template) |
|
(C++17)
|
konvertiert einen time_point zu einem anderen, aufrundend
(Funktions-Template) |
|
(C++17)
|
konvertiert einen time_point zu einem anderen, abrundend
(Funktions-Template) |
|
(C++17)
|
konvertiert eine Dauer zu einer anderen, rundend zur nächsten, bei Gleichheit zur geraden Zahl
(Funktions-Template) |
|
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
|
nächstgelegene Ganzzahl, bei halben Zahlen weg von Null rundend
(Funktion) |