std::chrono::round(std::chrono::time_point)
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <chrono>
|
||
template <class ToDuration, class Clock, class Duration> constexpr std::chrono::time_point<Clock, ToDuration> round(const std::chrono::time_point<Clock, Duration>& tp); |
(desde C++17) | |
Devuelve el punto de tiempo más cercano a tp representable en ToDuration, redondeando a par en casos intermedios.
La función no participa en la resolución de sobrecarga a menos que ToDuration sea una especialización de std::chrono::duration y std::chrono::treat_as_floating_point_v<typename ToDuration::rep> sea false.
Parámetros
| tp | - | Punto de tiempo para redondear al más cercano. |
Valor de retorno
d redondeada al punto de tiempo más cercano utilizando la duración de tipo ToDuration, redondeando a par en casos intermedios.
Posible implementación
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())};
}
|
Ejemplo
Ejecuta este código
#include <iostream>
#include <chrono>
#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 << "Punto de tiempo\t" "Conversión\t" "Piso\t" "Redondeo\t" "Techo\n";
std::cout << "(ms)\t\t" "(s)\t\t" "(s)\t" "(s)\t\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\t"
<< to_string(std::chrono::floor <Sec>(time_point_ms)) << "\t"
<< to_string(std::chrono::round <Sec>(time_point_ms)) << "\t\t"
<< to_string(std::chrono::ceil <Sec>(time_point_ms)) << "\n";
}
}
Salida:
Punto de tiempo Conversión Piso Redondeo Techo
(ms) (s) (s) (s) (s)
5432 5 5 5 6
5678 5 5 5 6
Véase también
| Convierte un punto de tiempo a otro punto de tiempo en el mismo reloj, con una duración diferente. (plantilla de función) | |
| Convierte un punto de tiempo a otro, redondeando hacia arriba (techo). (plantilla de función) | |
| Convierte un punto de tiempo a otro, redondeando hacia abajo (piso). (plantilla de función) | |
(C++17) |
Convierte una duración a otra, redondeando al más cercano, se empata con par. (plantilla de función) |
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
Entero más cercano, redondeando alejándose de cero en los casos intermedios (función) |