Вот такой код:
//сверху main() с аргументами
double bl=stod(string(argv[1]));
double br=stod(string(argv[2]));
double h=stod(string(argv[3]));
//тут typedef, ничего особенного;
//y,z функции типа double -> double;
typedef function<void* (function<double(double)>)> worker;
worker i1 = [bl,br,h]{
for(double i=bl;i<=br;i+=h){
cout <<"On the "<<i<<"the y= "<<y(i)<<"\n";
std::this_thread::yield();
}
return;
};
worker i2 = [bl,br,h]{
for(double i=bl;i<=br;i+=h){
cout <<"On the "<<i<<"the z= "<<z(i)<<"\n";
std::this_thread::yield();
}
return;
};
В коде действительно есть расчет на синтакс. сахар. Но что же такое мне написал компилятор?
$ g++ main2.cpp
main2.cpp: In function 'int main(int, char**)':
main2.cpp:41:4: error: conversion from 'main(int, char**)::<lambda()>' to non-scalar type 'worker' {aka 'std::function<void*(std::function<double(double)>)>'} requested
};
^
main2.cpp:48:4: error: conversion from 'main(int, char**)::<lambda()>' to non-scalar type 'worker' {aka 'std::function<void*(std::function<double(double)>)>'} requested
};
^
main2.cpp:50:3: error: jump to case label [-fpermissive]
default:
И как компилятор трактует приведение лямбд к функциональному типу?
Откровенно говоря, не вижу, чтоб ваша лямбда принимала функцию от double, возвращающую double, и возвращала void*. Она у вас принимает void, и возвращает void - тоак что если написать
typedef function<void(void)> worker;
то все вроде как сработает...
Вы же не удивитесь, скажем, определив некий тип как указатель на функцию от трех переменных, что ему не удастся передать указатель на функцию от одной переменной?...
Вы забыли объявить собственно аргументы лямбды. По умолчанию, получилась лямбда без аргументов, что не соответствует определению woker-а. Исправление:
worker i1 = [bl,br,h](function<double(double)> y){
for(double i=bl;i<=br;i+=h){
cout <<"On the "<<i<<"the y= "<<y(i)<<"\n";
std::this_thread::yield();
}
return;
};
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости