轻松测量方法的耗用时间

时间:2015-07-14 07:02:47

标签: c++ templates methods benchmarking

我想测量方法的执行时间,并找到以下主题:

Easily measure elapsed time

存在使用

测量功能执行时间的答案
#include <iostream>
#include <chrono>

template<typename TimeT = std::chrono::milliseconds>
struct measure
{
    template<typename F, typename ...Args>
    static typename TimeT::rep execution(F func, Args&&... args)
    {
        auto start = std::chrono::system_clock::now();
        func(std::forward<Args>(args)...);
        auto duration = std::chrono::duration_cast< TimeT> 
                            (std::chrono::system_clock::now() - start);
        return duration.count();
    }
};

int main() {
    std::cout << measure<>::execution(functor(dummy)) << std::endl;
}

是否可以将此代码用于方法测量?如何更改模板类型以传递方法和对象,如

measure<>::execution(object, method);

或更好

measure<>::execution(object.method(param));

到目前为止,我有以下结果:

struct measure
{
    template<class T, typename R>
    static R execution(T& obj, R(T::*func)())
    {
        auto start = std::chrono::system_clock::now();
        R result = (obj.*func)();
        auto duration = std::chrono::duration_cast<std::chrono::microseconds>
                            (std::chrono::system_clock::now() - start);
        return result;
    }
};

但我不知道如何通过Args并使用它,如上例所示。我必须执行

measure::execution(obj, method);

0 个答案:

没有答案