在C ++中引用此函数

时间:2014-12-02 18:41:04

标签: c++ c++11 recursion lambda anonymous-function

有没有通用的方法来引用当前正在执行的函数?可以让我这样做的东西,例如,

([] (int n) -> int {
  if (n <= 1) {
    return 1;
  }

  return n * thisFunc(n - 1);
})()

主要是,我正在考虑匿名函数调用自己而不使用辅助命名函数。所以避免this

1 个答案:

答案 0 :(得分:0)

您可以在C ++ 11中使用函数指针或函数对象,但没有内置方法来引用函数。例如:

std::function<int (int)> myFun = [] (int i) 
{
   if i <= 1
   {
       return 1;
   }
   return i * myFun(i-1);
}

我认为递归调用lambda不是它们的用法。 Lambdas本质上是指提供内联功能,因此意味着相当简单。 更不用说您提供的示例可以非常容易地用循环替换,从而实现更高效的实现:

int result = 1;
while (i > 1)
{
   result = result * i;
   i--;
}