带有 chrono::duration 参数和返回结果 chrono::duration::count 的模板函数
Template function with chrono::duration parameter and returning result of chrono::duration::count
我正在尝试编写一个允许用户指定 chrono::duration
的函数,例如 chrono::seconds
和 return 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
是全局的 - 您需要将其设为 class 的成员。
我正在尝试编写一个允许用户指定 chrono::duration
的函数,例如 chrono::seconds
和 return 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
是全局的 - 您需要将其设为 class 的成员。