gpt4 book ai didi

c++ - 多个函数调用的时间

转载 作者:行者123 更新时间:2023-11-30 01:51:28 29 4
gpt4 key购买 nike

来自 python 我正在尝试找到一种方法来为 C++ 代码中的多个函数调用计时。到目前为止,我正在使用这个。

 void my_func(/*some args*/) {
clock_t t_begin = std::clock();
// code
clock_t t_end = std::clock();
double elapsed_secs_U = double(t_end - t_begin) / CLOCKS_PER_SEC;
}

但这是高度重复的。我想要一个类似函数包装器的东西,这样我就可以写:

 void timer(func, *args) {
clock_t t_begin = std::clock();
func(*args)
clock_t t_end = std::clock();
double elapsed_secs_U = double(t_end - t_begin) / CLOCKS_PER_SEC;
}

可以这样使用:

 timer(compute_a, a, b)
timer(compute_b, b, c)

有什么办法可以用 C++ 实现吗?

PS:我需要生产运行的时间,因此我不想使用分析标志重新编译我的代码并将其粘贴到 Valgrind 或任何其他工具中

最佳答案

使用可变模板,你可以做类似的事情:

template <typename F, typename ... Ts>
void timer(F f, Ts&&...args) {
clock_t t_begin = std::clock();
f(std::forward<Ts>(args)...);
clock_t t_end = std::clock();
double elapsed_secs_U = double(t_end - t_begin) / CLOCKS_PER_SEC;
}

但简单

template <typename F>
void timer(F f) {
clock_t t_begin = std::clock();
f();
clock_t t_end = std::clock();
double elapsed_secs_U = double(t_end - t_begin) / CLOCKS_PER_SEC;
}

应该完成这项工作,并在需要传递参数时传递捕获 lambda:

timer([&](){ compute_b(b, c);});

关于c++ - 多个函数调用的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26136319/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com