を見て、
「へぇ、ラムダ式を関数ポインタに入れられるんだ」
と感心していたんですが、
「ラムダ式の関数ポインタを返すラムダ式って書けるのかな?」
という疑問が。
#include <iostream>
#include <vector>
int main()
{
using namespace std;
void(*(*f)())() = []()->void (*)() { return []{cout << "hello\n";}; };
void(*f1)() = f();
f1();
[]()->void (*)() { return []{cout << "hello\n";};}()();
vector<void(*)()> fv = {{[]{cout<<"1\n";}}, {[]{cout<<"2\n";}} };
for(void(*a)() : fv) a();
}
これの実行結果が
hello
hello
1
2
fにラムダ式の関数ポインタを返すラムダ式の関数ポインタを入れ、その実行結果をf1に。そしてf1を呼べば”hello”と表示されます。
その下の行は同じラムダ式を直接実行。
そして
「vectorにだって入れられるよね?」
と疑問に思ったから試してみたのがその下。
このプログラムはgcc-4.7.0 RC (2012/3/2版)で試しました。