C++,你如何缩放标准::时间::d
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
,你需要显式地将其转换回来。
相关文章:
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 标准::时间::d类型的挥发性对象
- C++20 标准::时间::d格式的缺点
- 子类化标准::时间::d
- 将标准::时间点乘以标量
- 从双秒到标准::时间:steady_clock::d的简短转换?
- 如何概括标准::时间::d?
- 将 boost:::chrono::steady_clock::time_point 转换为标准::时间::steady
- 如何将标准::时间::d转换为双倍(秒)?
- 哪个库 - 标准::时间::system_clock
- C++,你如何缩放标准::时间::d
- 如何更改标准::时间::high_resolution_clock::现在();到长
- 如何将标准::时间::high_resolution_clock::现在()转换为毫秒,微秒,..
- 如何使用谷歌测试打印标准::时间类型
- 快速转换标准::时间::time_point 到/从标准::字符串
- 如何格式化标准::时间持续时间
- 标准::时间 将天数添加到当前日期
- 如何将标准::时间::time_point转换为带有秒小数部分的日历日期时间字符串?
- 标准::时间纪元是什么时候?
- 将标准::时间与随机整数混合