转换 time_points: 从属名称错误

Casting time_points: dependent name error

dependent-name 'BaseClock:: time_point' is parsed as a non-type, but instantiation yields a type

是我为以下代码得到的错误:

struct H { SomeClock::time_point time; };
template<typename BaseClock>
void RelativeClock<BaseClock>::someMethod(H h) {
    //...
    typename BaseClock::time_point newtime;
    newtime = time_point_cast<BaseClock::time_point>(h.time);
    //...
}

对于这个例子,SomeClock::time_point可以是SystemClock::time_point,而实际上它是微秒粒度的time_point。重要的一点是,它可以是与 BaseClock::time_point 不同的类型,但也可以是相同的,通常是这样。 我尝试在最后一行进行强制转换,以缓解 BaseClockSystemClock 的类型不同时出现的问题,而在我的情况下通常不会。不过,它打破了我的一项测试,我实际上使用了不同的时钟类型。 更奇怪的是,模板参数实际解析到的类型应该是相同的,因为在实现中它们都基于 std::chrono::microseconds。 目前,我犹豫要不要专门为测试中使用的类型实现方法,我正在寻找通用选项。

除了 class' 模板之外,如何使作业具有更多通用性? 如何避免顶部给出的错误?

这应该可以修复您的编译错误:

newtime = time_point_cast<typename BaseClock::time_point>(h.time);

你错过了那里的 typename。需要表明 time_point 需要是类型而不是值。