【发布时间】:2018-12-24 21:00:45
【问题描述】:
为什么下面的函数编译不出来,报错
cannot convert from 'std::chrono::time_point<std::chrono::steady_clock,std::chrono::duration<double,std::nano>>' to 'std::chrono::time_point<std::chrono::steady_clock,std::chrono::steady_clock::duration>'
#include <chrono>
typedef std::chrono::high_resolution_clock::time_point TimePoint;
typedef std::chrono::duration<double, std::ratio<86400>> JulianDays;
TimePoint JulianDaysToUTC(const JulianDays& days)
{
static const JulianDays EquivalentJulianYearInDays(2451545.0);
static const JulianDays LeapSecondCorrection(0.0008);
static const TimePoint CorrectedEpoch = TimePoint() - EquivalentJulianYearInDays + LeapSecondCorrection;
return CorrectedEpoch + days;
}
注意:TimePoint() 被替换为返回 TimePoint 的函数,但该返回值不/不应该相关。
修改它以使用整数持续时间允许它编译,但我丢失了小数天部分,这是不希望的。
#include <chrono>
typedef std::chrono::high_resolution_clock::time_point TimePoint;
typedef std::chrono::duration<int, std::ratio<86400>> Days;
typedef std::chrono::duration<double, std::ratio<86400>> JulianDays;
TimePoint JulianDaysToUTC(const JulianDays& days)
{
using std::chrono::duration_cast;
static const JulianDays EquivalentJulianYearInDays(2451545.0);
static const JulianDays LeapSecondCorrection(0.0008);
static const TimePoint CorrectedEpoch = TimePoint() - duration_cast<Days>(EquivalentJulianYearInDays) + duration_cast<Days>(LeapSecondCorrection);
return CorrectedEpoch + duration_cast<Days>(days);
}
【问题讨论】:
-
仅供参考:高分辨率时钟的历元通常不固定。同一程序的不同执行可能会有所不同。
-
我相信对于将要使用它的应用程序,不同执行之间的差异并不重要,只要在同一个执行中它是相同的。不完全确定,但我下周会问。