0

我是 C++ 模板的新手,我正在尝试编写一个函数,该函数返回具有指定时间单位和类型的 chrono::duration。例如,这条线给了我以秒为单位的双倍时间差:

std::chrono::duration<double> secd =
     std::chrono::duration_cast<std::chrono::duration<double,std::ratio<1>>>(end - start);

我有一个类函数,它给我一个持续时间,我想使用模板来指示返回值的类型和单位(在前面的例子中,这将是 double 和 ratio<1>)。我想要的是类似于这个伪代码的东西:

template typename<class T, class R> std::chrono::duration<T, R> getStepTime() {
    return std::chrono::duration_cast<std::chrono::duration<T, R>>(_time);
}

where_time是具有持续时间的班级成员。到目前为止,我所有的尝试都没有编译。

如果有更好的方法可以在不使用模板的情况下实现这一点,我会全力以赴。

4

2 回答 2

2

模板使用不当typename并且缺少关闭>。这是一个经过调整的示例来测试编译:

template <typename T, typename R> 
std::chrono::duration<T, R> getStepTime() 
{
    std::chrono::duration<T, R> duration;
    return std::chrono::duration_cast<std::chrono::duration<T, R>>(duration);
}

http://ideone.com/QGYm8u

于 2013-12-28T10:38:56.560 回答
1

typename关键字使用不当;尝试

template<typename T, typename R> 
std::chrono::duration<T, R> getStepTime(Step step) {
   return
     std::chrono::duration_cast<std::chrono::duration<T, R>>(_time);
}

但您应该显示更多代码。你的例子太小了,甚至无法测试。

于 2013-12-28T10:21:51.427 回答