8 Haziran 2020 Pazartesi

std::chrono::duration Sınıfı İle Duration Aritmetiği

Örnek
Bjarne Stroustrup şöyle açıklamış.
"The period is a unit system, so there is no = or += taking a plain value. Allowing that would be like allowing the addition of 5 of an unknown SI unit to a length in meters. 
ve şöyle bir örnek veriyor. Yani duration basit bir sayı ile toplanamaz, çıkartılamaz.
duration<long long, milli> d1{7}; // 7 milliseconds
d1 += 5; // error
Örnek
Time_point'lerin ortalamasını alan kodu şöyle yaparız.
template <class Clock, class Duration0, class ...Duration>
auto
avg(const std::chrono::time_point<Clock, Duration0>& t0,
    const std::chrono::time_point<Clock, Duration>& ...t)
{
    return t0 + sum((t - t0)...) / (1 + sizeof...(t));
}
Tek nokta olduğunda şöyle yaparız.
template <class Clock, class Duration0>
auto
avg(const std::chrono::time_point<Clock, Duration0>& t0)
{
    return t0;
}
sum metodu şöyledir. Burada time_point nesnesi duration nesnesine çevrildiği için bu yazıya dahil ettim.
template <class Rep0, class Period0>
auto
sum(const std::chrono::duration<Rep0, Period0>& d0)
{
    return d0;
}

template <class Rep0, class Period0, class ...Rep, class ...Period>
auto
sum(const std::chrono::duration<Rep0, Period0>& d0,
    const std::chrono::duration<Rep, Period>& ...d)
{
    return d0 + sum(d...);
}

Hiç yorum yok:

Yorum Gönder