我在Effective Modern C++中看到的一个代码片段巧妙地实现了创建函数 timer的检测原理:
auto timeFuncInvocation =
[](auto&& func, auto&&... params)
{
start timer;
std::forward<decltype(func)>(func)(
std::forward<decltype(params)>(params)...);
stop timer and record elapsed time;
};
我的问题是关于std::forward<decltype(func)>(func)(...
- 据我了解,我们实际上是将函数转换为其原始类型,但为什么需要这样做呢?看起来一个简单的调用就可以解决问题。
- 还有其他情况我们使用完美转发来进行函数调用吗?
如果我们想让计时器类型成为编译时间常数,这看起来像是在 lambda 表达式中使用熟悉的模板语法的一个很好的用例。