std::common_type(std::chrono::duration)
De cppreference.com
| Definido en el archivo de encabezado <chrono>
|
||
template <class Rep1, class Period1, class Rep2, class Period2>
struct common_type<std::chrono::duration<Rep1, Period1>,
std::chrono::duration<Rep2, Period2>> {
typedef std::chrono::duration<
typename std::common_type<Rep1, Rep2>::type, /*véase Notas*/> type;
};
|
(desde C++11) | |
Expone el tipo llamado type, que es el tipo común de dos std::chrono::durations, cuyo período es el máximo común divisor de Period1 y Period2.
Notas
El período de la duración resultante se puede calcular formando una razón del máximo común divisor de Period1::num y Period2::num y el mínimo común múltiplo de Period1::den y Period2::den.
Ejemplo
Ejecuta este código
#include <type_traits>
#include <iostream>
#include <chrono>
// std::chrono ya encuentra el máximo común divisor,
// probablemente usando std::common_type<>. Hacemos
// la deducción de tipo externamente.
template <typename T,typename S>
constexpr auto durationDiff(const T& t, const S& s)
-> typename std::common_type<T,S>::type
{
typedef typename std::common_type<T,S>::type Common;
return Common(t) - Common(s);
}
int main()
{
using namespace std::literals;
constexpr auto ms = 30ms;
constexpr auto us = 1100us;
constexpr auto diff = durationDiff(ms, us);
std::cout << ms.count() << "ms - " << us.count() << "μs = " << diff.count()
<< (std::is_same<decltype(diff), decltype(ms)>() ? "ms" : "μs")
<< '\n';
}
Salida:
30ms - 1100μs = 28900μs
Véase también
| Especializa el rasgo std::common_type. (especialización de plantilla de clase) | |
(C++11) |
Deduce el tipo del resultado de una expresión aritmética mixta (plantilla de clase) |