2015-11-04 2 views
2

я практиковал лямбды, и я нашел этот код:Это станд :: функция аналогична

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

я не знал, но теперь я думаю, что это очень хорошо, и очень чистый синтаксис, спасибо за ваш ответ –

Смежные вопросы