2015-11-04 75 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

的一個變量,我不知道,但現在我覺得這很好,很乾淨的語法,感謝您的答覆 –