Пространства имён
Варианты
Действия

std::common_type(std::chrono::duration)

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
 
<tbody> </tbody>
Определено в заголовочном файле <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, /*смотрите примечание*/> type; };
(начиная с C++11)

Предоставляет тип с именем type, который является общим типом двух std::chrono::duration, чей период является наибольшим общим делителем Period1 и Period2.

Примечание

Период полученной длительности можно вычислить, составив отношение наибольшего общего делителя Period1::num и Period2::num и наименьшего общего кратного Period1::den и Period2::den.

Пример

#include <type_traits>
#include <iostream>
#include <chrono>

// std::chrono уже нашёл наибольший общий делитель,
// вероятно, используя std::common_type<>. Вывод типа
// делаем внешне.

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 << " - " << us << " = " << diff << '\n';
}

Вывод:

30ms - 1100us = 28900us

Смотрите также

специализация свойства std::common_type
(специализация шаблона класса) [править]
определяет общий тип группы типов
(шаблон класса) [править]