Задать вопрос
Julila
@Julila
вечный студент / german version

Как используется в примере Lambda функция?

Привет всем. Помогите пожалуйста понять пример.
Результаты выполнения
2.0 ^ 3 = 8
2.0 ^ 3 = 8
2.0 ^ 3 = 8
2.0 ^ 3 = 8
end of main


В общем мне не понятно почему параметр в ф ю x3 передается через запятую
#include <iostream>
#include <cstdlib>
using namespace std;

#include "../tools/tools.h"

typedef double (*polynom_t)(double x);  //  ???что тут происходит? 

double x3(double x) { return x*x*x; }

//double eval(polynom_t p, double x)
//{
	//return p(x);
//}

 
double eval(function<double(double)> p, double x)   // ???что значит function<double(double)> p
{
	return p(x);
}  

int main()
{
	// Variante 1
    cout << "2.0 ^ 3 = " << eval(x3,2.0) << endl;   // ?? почему тут нет передачи параметра в фю x3 параметра явно 


   cout << "2.0 ^ 3 = " << eval([](double x) -> double {return x*x*x;},2.0) << endl;     cout << "2.0 ^ 3 = " << eval([](double x){return x*x*x;},2.0) << endl;

    auto lambda_x3 = [](double x){return x*x*x;};
	 cout << "2.0 ^ 3 = " << eval(lambda_x3,2.0) << endl;

	function<double(double)> func_x3 = [](double x){return x*x*x;};
    cout << "end of main" << endl;
    
    return EXIT_SUCCESS;
}
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
function<double(double)> -- это тип функции, которая принимает один параметр double и возвращает double.
Создать значение функционального типа можно с помощью синтаксиса лямбда-выражений. Простейший пример:
function<double(double)> f;
f = [](double x){ return x * 2; };
f(5);  //=> 10
f = [](double x){ return x * x; };
f(5);  //=> 25

Функция eval в вашем примере -- это функция высшего порядка, которая принимает переменную p типа функции и переменную x типа double. Она определена так, что eval(lambda_x3,2.0) -- это то же самое, что и lambda_x3(2.0).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы