gpt4 book ai didi

c++ - 在 C++ 中使用模板时如何使用 void 参数

转载 作者:行者123 更新时间:2023-12-05 01:51:17 25 4
gpt4 key购买 nike

我想做一个函数来测试传入函数的运行时间。我使用模板使其适用于许多功能。

我省略了计算时间的代码。像这样:

template<typename F>
void get_run_time(F func)
{
//time start
func;
//time end
}

但是如果我传入的函数是void,就会报错提示我添加F=void。我试图添加它,但它没有用。我可以将 void 更改为 bool,但这很奇怪。

另一个问题是我想测试一个函数时间并正常运行我的整个代码。所以我增加了返回值。像这样:

template<typename F>
F get_run_time(F func)
{
//time start
F tf=func;
//time end
return tf;
}

但是实际测试的时间显然是错误的。我猜它返回时就开始运行函数了。如何在继续下面的代码之前获取运行结果?

最佳答案

惯用的 C++ 方式(如我所见)是这样的

template <class F>
auto call(F f)
{
Timer t;
return f();
}

这适用于返回 void 的函数。注意,这里没有开始和停止。 Timer 是一个 RAII 类,它在构造时启动计时器并在销毁时停止。

为简洁起见,将参数转发到 f 和诸如 std::invoke 之类的细节未显示。

关于c++ - 在 C++ 中使用模板时如何使用 void 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72387132/

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