私はこのようなことをしたいと思います:
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
誰かがこれを修正する方法、またはそれを回避する方法について考えを持っていますか? std=c++11 で Intel コンパイラ icpc (ICC) 13.1.2 を使用しています
ありがとう