Namespaces
Variants

std::chrono:: treat_as_floating_point

From cppreference.net
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

Voir aussi