Namespaces
Variants

std::chrono:: treat_as_floating_point

From cppreference.net
Определено в заголовочном файле <chrono>
template < class Rep >
struct treat_as_floating_point : std:: is_floating_point < Rep > { } ;
(начиная с C++11)

Трейт std::chrono::treat_as_floating_point помогает определить, может ли длительность быть преобразована в другую длительность с другим периодом тиков.

Неявные преобразования между двумя длительностями обычно зависят от периода тика длительностей. Однако неявные преобразования могут происходить независимо от периода тика, если std :: chrono :: treat_as_floating_point < Rep > :: value равно true .

Содержание

Вспомогательная переменная шаблона

template < class Rep >
constexpr bool treat_as_floating_point_v = treat_as_floating_point < Rep > :: value ;
(начиная с C++17)

Специализации

std::chrono::treat_as_floating_point может быть специализирован для пользовательских типов.

Пример

#include <chrono>
#include <iostream>
#include <thread>
void timed_piece_of_code() 
{
    std::chrono::milliseconds simulated_work(2);
    std::this_thread::sleep_for(simulated_work);
}
int main() 
{
    auto start = std::chrono::high_resolution_clock::now();
    std::cout << "Запуск кода с измерением времени...\n";
    timed_piece_of_code();
    auto stop = std::chrono::high_resolution_clock::now();
    // Тип миллисекунд с плавающей точкой
    using FpMilliseconds = 
        std::chrono::duration<float, std::chrono::milliseconds::period>;
    static_assert(std::chrono::treat_as_floating_point<FpMilliseconds::rep>::value, 
                  "Rep required to be floating point");
    // Обратите внимание, что неявное преобразование здесь не разрешено
    auto i_ms = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start);
    // Обратите внимание, что неявное преобразование здесь разрешено
    auto f_ms = FpMilliseconds(stop - start);
    std::cout << "Результаты измерения времени:\n";
    std::cout << "  Время в миллисекундах, с использованием стандартного представления: "
              << i_ms.count() << '\n';
    std::cout << "  Время в миллисекундах, с использованием представления с плавающей точкой: "
              << f_ms.count() << '\n';
}

Возможный вывод:

Запуск кода с измерением времени...
Результаты измерения времени:
  Время в миллисекундах, с использованием стандартного представления: 2
  Время в миллисекундах, с использованием представления с плавающей точкой: 2.57307

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