c++ - 带有 chrono::duration 参数和 chrono::duration::count 返回结果的模板函数

标签 c++ timer c++-chrono function-template

我正在尝试编写一个允许用户指定 chrono::duration 的函数,例如 chrono::seconds 并返回 chrono 的结果::duration::count.

我可以使用以下模板函数执行此操作:

template<typename D, typename Rep>
Rep getTimeSinceStart(){
    return chrono::duration_cast<D>(chrono::steady_clock::now() - start).count();
    };

要调用此函数,我必须指定 Rep 的类型。例如,假设我有一个名为 timer 的对象,如果 Rep 是一个 long long:

long long sinceStart = timer.getTimeSinceStart<chrono::seconds, long long>();

但是,有没有办法只指定 chrono::duration

我在想:

template<typename D>
D.rep getTimeSinceStart(){
    return chrono::duration_cast<D>(chrono::steady_clock::now() - start).count();
};

这样我就可以调用:

long long sinceStart = timer.getTimeSinceStart<chrono::seconds>();

最佳答案

像这样:

#include <thread>
#include <iostream>
#include <chrono>

const std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();

template<typename D>
typename D::rep getTimeSinceStart(){
    return std::chrono::duration_cast<D>(std::chrono::steady_clock::now() - start).count();
};

int main (int argc, char **argv)
{
    std::this_thread::sleep_for(std::chrono::seconds(2));
    long long sinceStart = getTimeSinceStart<std::chrono::seconds>();
    std::cout << "since start: " << sinceStart << std::endl;

}

在上面的代码中,start 是一个全局变量——您需要让它成为您的类的成员。

关于c++ - 带有 chrono::duration 参数和 chrono::duration::count 返回结果的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221637/

相关文章:

c++ - 在 float 中获取计时秒数

c++ - 使用 C++ Chrono 处理更新循环?

c++ - 使用 std::chrono 的正确方法

c++ - 如何在Qt中创建线程网络服务器?

c++ - 晦涩的 C++ 运算符重载

java - 从 Java 调用 C++ 函数

java - 可以不使用定时器

应用程序的 C# 时间延迟

c++ - 阻止程序打开您的程序

c - Windows操作系统的C语言软件中断服务例程