Я хотел бы сделать что-то вроде этого:
int main()
{
auto f = [/*some variables*/](/*take lambda function*/)
{/*something with lambda function*/};
f([/*other variables*/](/*variables to be decided by f()*/)
{/*something with variables*/});
}
Я знаю, что можно передать лямбду на функцию, а также на лямбду. Следующие работы:
int main()
{
int x=0;
int y=0;
auto f = [x,y](double (func)(int)) -> double
{func(0); return 0.0;};
f([](int i) -> double
{return 0.0;});
}
Но следующее не работает (как только я изменяю переменные области для добавления [x])
int main()
{
int x=0;
int y=0;
auto f = [x,y](double (func)(int)) -> double
{func(0); return 0.0;}
f([x](int i) -> double //[x] does not work
{return 0.0;});
}
который дает ошибку:
error: function "lambda [](double (*)(int))->double::operator()" cannot be called with the given argument list
argument types are: (lambda [](int)->double)
object type is: lambda [](double (*)(int))->double
У кого-нибудь есть идея о том, как это исправить, или об этом? Я использую компилятор Intel icpc (ICC) 13.1.2 с std = С++ 11
Спасибо