C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在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中以优雅的方式进行计时所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。