簡體   English   中英

C ++,如何縮放std :: chrono :: duration?

[英]C++, how do you scale a std::chrono::duration?

我不明白您應該如何縮放std::chrono::duration 用浮點數縮放持續時間的正確方法是什么?

template <class Duration>
auto random_duration(Duration low, Duration high) noexcept -> Duration {
    static auto rd = std::random_device();
    static auto re = std::default_random_engine(rd());
    auto dist = std::uniform_real_distribution<double>(0, 1);
    const auto off = std::chrono::duration<Duration>(dist(re) * (high - low));
    return low + off;
}

首先,如果您使用兩個std::duration<double, ...>對象實例化此模板,則一切正常且按預期進行。 您遇到的問題可能是,當輸入類型類似於std::duration<int, ...>時,由operator*獲得的實例可能無法隱式轉換為尾隨返回類型( Duration )。 在這種情況下,將其縮放為兩倍是有損操作,(如果您打算這樣做)就可以單獨使用,但返回它的原因是Duration 不是 除非您明確聲明,否則<chrono>不允許進行此類轉換。 這是一件好事。

這是它如何工作的。

const auto off = dist(re)*((high - low));

return low + std::chrono::duration_cast<Duration>(off);

因此,您需要明確地將輸入持續時間可能有損地轉換為可以乘以double 一旦有了它,為了與尾隨的返回類型Duration ,您需要將其顯式轉換回去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM