例如,我有一个函数模板
template<class Fun>
void Foo(Fun f)
{
...
}
参数是函数对象或函数指针。如果是普通的函数指针,由于函数不能内联,所以性能不好。在这里使用 lambda 函数怎么样?谢谢。
正如您所说,通过函数指针的调用通常不能内联,因为目标函数可能仅在运行时才知道。
可以在此处内联 lambda。它的类型(推断为模板参数Fun
)在编译时是已知的;因此函数本身 ( Fun::operator()
) 也是已知的。
闭包类型是由 lambda 表达式创建的类型。它的调用运算符(即operator ()
)inline
按照 5.1.2/5 声明(重点是我的):
lambda-expression的闭包类型有一个公共
inline
函数调用运算符(13.5.4),其参数和返回类型分别由lambda-expression的parameter-declaration-clause和trailing-return-type描述。
此外,编译器可以有效地看到调用运算符的定义,因此能够内联函数调用。