0

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

我可以使用以下模板函数来做到这一点:

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

要调用此函数,我必须指定Rep. 例如,假设我有一个名为 的对象timer,如果Replong 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>();
4

1 回答 1

2

像这样的东西:

#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是一个全局的——你会想让它成为你班级的成员。

于 2015-10-19T18:51:57.753 回答