Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++中引用此函数_C++_C++11_Recursion_Lambda_Anonymous Function - Fatal编程技术网

在C++中引用此函数

在C++中引用此函数,c++,c++11,recursion,lambda,anonymous-function,C++,C++11,Recursion,Lambda,Anonymous Function,是否有任何常规方法来引用正在执行的当前函数?比如说让我这样做的东西 ([] (int n) -> int { if (n <= 1) { return 1; } return n * thisFunc(n - 1); })() 我主要考虑匿名函数在不使用辅助命名函数的情况下调用自己。所以要避免。您可以在C++11中使用函数指针或函数对象,但没有内置的方法来引用函数。例如: std::function<int (int)> myFun = [] (i

是否有任何常规方法来引用正在执行的当前函数?比如说让我这样做的东西

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

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

我主要考虑匿名函数在不使用辅助命名函数的情况下调用自己。所以要避免。

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

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

将其存储到自动thisFunc=[]int n->int{…?据我所知,不命名递归lambda函数是不可能的。我也不明白你为什么不想命名它。如果函数是类内的运算符,你可以这样做*当然,这对lambdas没有帮助。@Rapptz也想到了这一点,但既然问题被标记为C++11…?你可能是对的em不应该被递归调用。我想到了JavaScript,还记得一些类似的机制,允许您引用当前函数。我实际上是想强调不要有过于复杂的lambda,递归本身并不一定复杂,尽管它可能是复杂的。
int result = 1;
while (i > 1)
{
   result = result * i;
   i--;
}