ラムダ関数をC++ 11で返す関数を書くことができるのだろうかと思います。もちろん、そのような関数を宣言する方法が問題です。各ラムダには型がありますが、その型はC++では表現できません。私はこれがうまくいくとは思わない:ラムダ式を返す関数
auto retFun() -> decltype ([](int x) -> int)
{
return [](int x) { return x; }
}
もこの:
int(int) retFun();
私はラムダから関数へのポインタ、たとえばへの自動変換、またはそのようないくつかを認識していませんよ。関数オブジェクトを手作りして返す唯一のソリューションですか?あなたはどのラムダ関数が変換されているし、ちょうどstd::function
を使用し、手作りの関数オブジェクトを必要としない
すでに言われていることを追加するために、ステートレスラムダ関数は関数ポインタに変換可能です。 –
IMO最初のオプションは 'decltype'のラムダが関数本体と同じでなく、したがって異なる型を持っています(return文を含めても) – Motti
ちなみに、ラムダキャプチャ句が空の場合、暗黙的に関数へのポインタに変換できます。 – GManNickG