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