2

例如,我有一个函数模板

template<class Fun>
void Foo(Fun f)
{
   ...
}

参数是函数对象或函数指针。如果是普通的函数指针,由于函数不能内联,所以性能不好。在这里使用 lambda 函数怎么样?谢谢。

4

2 回答 2

4

正如您所说,通过函数指针的调用通常不能内联,因为目标函数可能仅在运行时才知道。

可以在此处内联 lambda。它的类型(推断为模板参数Fun)在编译时是已知的;因此函数本身 ( Fun::operator()) 也是已知的。

于 2013-07-16T17:51:14.133 回答
3

闭包类型是由 lambda 表达式创建的类型。它的调用运算符(即operator ()inline按照 5.1.2/5 声明(重点是我的):

lambda-expression的闭包类型有一个公共inline函数调用运算符(13.5.4),其参数和返回类型分别由lambda-expressionparameter-declaration-clausetrailing-return-type描述。

此外,编译器可以有效地看到调用运算符的定义,因此能够内联函数调用。

于 2013-07-16T18:01:21.353 回答