转换 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 不同的类型,但也可以是相同的,通常是这样。
我尝试在最后一行进行强制转换,以缓解 BaseClock
和 SystemClock
的类型不同时出现的问题,而在我的情况下通常不会。不过,它打破了我的一项测试,我实际上使用了不同的时钟类型。
更奇怪的是,模板参数实际解析到的类型应该是相同的,因为在实现中它们都基于 std::chrono::microseconds
。
目前,我犹豫要不要专门为测试中使用的类型实现方法,我正在寻找通用选项。
除了 class' 模板之外,如何使作业具有更多通用性?
如何避免顶部给出的错误?
这应该可以修复您的编译错误:
newtime = time_point_cast<typename BaseClock::time_point>(h.time);
你错过了那里的 typename
。需要表明 time_point
需要是类型而不是值。
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 不同的类型,但也可以是相同的,通常是这样。
我尝试在最后一行进行强制转换,以缓解 BaseClock
和 SystemClock
的类型不同时出现的问题,而在我的情况下通常不会。不过,它打破了我的一项测试,我实际上使用了不同的时钟类型。
更奇怪的是,模板参数实际解析到的类型应该是相同的,因为在实现中它们都基于 std::chrono::microseconds
。
目前,我犹豫要不要专门为测试中使用的类型实现方法,我正在寻找通用选项。
除了 class' 模板之外,如何使作业具有更多通用性? 如何避免顶部给出的错误?
这应该可以修复您的编译错误:
newtime = time_point_cast<typename BaseClock::time_point>(h.time);
你错过了那里的 typename
。需要表明 time_point
需要是类型而不是值。