std::chrono::treat_as_floating_point
Материал из cppreference.com
<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