![](/img/trans.png)
[英]How to declare a std::chrono::duration<double> variable in c++
[英]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.