2015-11-04 65 views
2

我正在练习lambda表达式,我发现这个代码:此的std ::功能类似于

auto make_fibo() 
{ 
    return [](int n) { 
    std::function<int(int)> recurse; 
    recurse = [&](int n){ 
     return (n<=2)? 1 : recurse(n-1) + recurse(n-2); 
    }; 
    return recurse(n); 
    }; 
} 

我不知道它是这样的,就是这样,不知道他std::function<int(int)> recurse;和搜索和阅读此之后:

http://www.cplusplus.com/reference/functional/function/

我的问题是什么?这std ::功能是类似于这个例如:

typedef int (*FredMemFn)(int i); 

谢谢你,并为英语感到抱歉。

回答

3

std::function类型是函数指针的泛化。 C++对函数,成员函数和函数对象进行了区分(如果您还没有听说过最后一个,那就去看看吧!它们超酷!),所以一个正常的函数指针不能指向所有的你可以像函数一样调用C++中的事物类型。 std::function本质上是一种类似于函数指针的类型,它可以指向任何可以像函数一样调用的任何东西。要使用std::function指向一些与参数类型Arg1, Arg2, ..., ArgN和返回类型Ret,声明类型

std::function<Ret (Arg1, Arg2, ..., ArgN)> 
+0

的一个变量,我不知道,但现在我觉得这很好,很干净的语法,感谢您的答复 –