【问题标题】:Function to return a chrono::duration using templates for the time unit使用时间单位模板返回 chrono::duration 的函数
【发布时间】:2013-12-28 10:15:30
【问题描述】:

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

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

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

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

其中_time 是具有持续时间的类成员。到目前为止,我所有的尝试都没有编译成功。

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

【问题讨论】:

  • 如果你想要返回类型的通用性,你需要模板!

标签: c++ templates time chrono


【解决方案1】:

typename 使用不当,您的模板中缺少关闭 &gt;。这是一个经过调整的示例来测试编译:

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

【讨论】:

  • 两个答案都有效,谢谢大家! :) 我只是想说(对于未来的 googlers),由于我的函数在一个类中,我必须将模板化代码放在标题中,否则它不会编译。
【解决方案2】:

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);
}

但您应该显示更多代码。您的示例太小,无法进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2023-01-11
    • 2018-02-03
    相关资源
    最近更新 更多