std::chrono:: treat_as_floating_point
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Non-member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Helper classes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<chrono>
|
||
|
template
<
class
Rep
>
struct treat_as_floating_point : std:: is_floating_point < Rep > { } ; |
(depuis C++11) | |
Le trait
std::chrono::treat_as_floating_point
aide à déterminer si une durée peut être convertie en une autre durée avec une période de tick différente.
Les conversions implicites entre deux durées dépendent normalement de la période de tic des durées. Cependant, les conversions implicites peuvent se produire indépendamment de la période de tic si std :: chrono :: treat_as_floating_point < Rep > :: value est true .
Table des matières |
Modèle de variable d'assistance
|
template
<
class
Rep
>
constexpr bool treat_as_floating_point_v = treat_as_floating_point < Rep > :: value ; |
(depuis C++17) | |
Spécialisations
std::chrono::treat_as_floating_point
peut être spécialisé pour des types définis par le programme.
Exemple
#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 << "Running some timed piece of code...\n"; timed_piece_of_code(); auto stop = std::chrono::high_resolution_clock::now(); // A floating point milliseconds type 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"); // Note that implicit conversion is not allowed here auto i_ms = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start); // Note that implicit conversion is allowed here auto f_ms = FpMilliseconds(stop - start); std::cout << "Timing stats:\n"; std::cout << " Time in milliseconds, using default rep: " << i_ms.count() << '\n'; std::cout << " Time in milliseconds, using floating point rep: " << f_ms.count() << '\n'; }
Sortie possible :
Running some timed piece of code... Timing stats: Time in milliseconds, using default rep: 2 Time in milliseconds, using floating point rep: 2.57307