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

std::chrono::treat_as_floating_point

Материал из 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 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.

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

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

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

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

Пример

#include <iostream>
#include <chrono>
#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 должен быть с плавающей запятой");

    // Обратите внимание, что неявное преобразование здесь не допускается.
    auto i_ms = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start);

    // Обратите внимание, что здесь разрешено неявное преобразование
    auto f_ms = FpMilliseconds(stop - start);

    std::cout << "Статистика времени:\n";

    std::cout << "  Время в миллисекундах с использованием rep по умолчанию: "
              << i_ms.count() << '\n';
              
    
    std::cout << "  Время в миллисекундах с использованием rep с плавающей запятой: "
              << f_ms.count() << '\n';
              
}

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

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

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

Morty Proxy This is a proxified and sanitized view of the page, visit original site.