在模板中使用lambda函数的性能?

时间:2013-07-16 17:48:33

标签: c++ templates lambda

例如,我有一个功能模板

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

参数是函数对象或函数指针。如果它是一个普通的函数指针,性能不好,因为函数不能内联。在这里使用lambda函数怎么样?感谢。

2 个答案:

答案 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

  

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