末尾再帰の最適化のため
lambdaは再帰できる。が、末尾再帰を最適化できない。
std::function< void () > func ; func = [&]{ func() ; } ;
このコードは、残念ながら、ループにすることはできない。
autoは使えない。なぜなら、autoの名前は、その初期化式の中では、使えないからだ。
// Error auto func = [&]{ func() ; } ;
lambda式の末尾再帰を最適化できるようにするためには、named lambdaが必要になる。
[]func(){ func() ; } ;
2 comments:
std::function<void ()> func = [&func]{ func(); };
だと、どうなりますか?
それは同じです。
ただ、明示的にキャプチャリストを指定しただけです。
それから、宣言文の初期化式の中で、宣言した名前を使うのは、どうもまずいようなので、コードを書きなおしました。
Post a Comment