이미 좋은 답변이 있습니다. 다음은 단지 호기심에 불과하지만 사용을 제안하지는 않습니다.
다른 사람들이 대답했듯이 람다 factorial
은 자체를 캡처하려고 시도하므로 상태가 아닙니다. 따라서 함수 포인터로 변환 할 수 없습니다.
주면서 전역 또는 static
물체를 포착 할 필요가 없습니다, 그래서 당신은 다음 factorial
전역 또는 static
변수를 만들 경우 당신은 그것을 캡처 할 필요가 없습니다이 잘 (GCC 4.7.2)
#include <iostream>
typedef int (*function)(int);
int main() {
static function factorial = [](int x){
return (x < 2) ? 1 : x * factorial(x - 1);
};
std::cout << factorial(5) << '\n';
}
를 작동
#include <iostream>
typedef int (*function)(int);
function make_factorial() {
static function factorial = [](int x){
return (x < 2) ? 1 : x * factorial(x - 1);
};
return factorial;
}
int main() {
auto factorial = make_factorial();
std::cout << factorial(5) << '\n';
}
그런 다음 typedef
제거 더 :-)를 당황하게하려면 :
을
당신은 또한이 같은 공장을 만들 수 있습니다3210
// This is a function returning a pointer to a function taking an int and returning an int.
int (*(make_factorial)())(int) {
static int (*factorial)(int) = [](int x){
return (x < 2) ? 1 : x * factorial(x - 1);
};
return factorial;
}
람다는 아무것도 포착하지 않으면 함수 포인터로 변환 될 수 있습니다. – jrok
쿨, 네 말이 맞아. 알았어, 고마워. – sircodesalot
이것은 거의 http://stackoverflow.com/questions/2067988/recestive-lambda-functions-in-c0x – doctorlove