我想测量方法的执行时间,并找到以下主题:
存在使用
测量功能执行时间的答案#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);