在c中以优雅的方式进行计时

前端之家收集整理的这篇文章主要介绍了在c中以优雅的方式进行计时前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我感兴趣的是计算自由函数或成员函数(模板与否)的执行时间.调用TheFunc有问题的函数,它的调用
TheFunc(/*parameters*/);

要么

ReturnType ret = TheFunc(/*parameters*/);

当然我可以按如下方式包装这些函数调用

double duration = 0.0 ;
std::clock_t start = std::clock();
TheFunc(/*parameters*/);
duration = static_cast<double>(std::clock() - start) / static_cast<double>(CLOCKS_PER_SEC);

要么

double duration = 0.0 ;
std::clock_t start = std::clock();
ReturnType ret = TheFunc(/*parameters*/);
duration = static_cast<double>(std::clock() - start) / static_cast<double>(CLOCKS_PER_SEC);

但是我想做一些比这更优雅的事情,即(从现在起我将坚持使用void返回类型)如下:

Timer thetimer ;
double duration = 0.0;
thetimer(*TheFunc)(/*parameters*/,duration);

其中Timer是我想设计的一些时序类,这将允许我编写前面的代码,这样在前面代码的最后一行的exectution之后,double duration将包含执行时间

TheFunc(/*parameters*/);

但我不知道如何做到这一点,也不是我的目标语法/解决方案是最佳的…

解决方法

使用可变参数模板,您可以:
template <typename F,typename ... Ts>
double Time_function(F&& f,Ts&&...args)
{
    std::clock_t start = std::clock();
    std::forward<F>(f)(std::forward<Ts>(args)...);
    return static_cast<double>(std::clock() - start) / static_cast<double>(CLOCKS_PER_SEC);
}

猜你在找的C&C++相关文章