デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4419  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

2012年3月8日 #

stateless lambda

を見て、

「へぇ、ラムダ式を関数ポインタに入れられるんだ」

と感心していたんですが、

「ラムダ式の関数ポインタを返すラムダ式って書けるのかな?」

という疑問が。

 

#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版)で試しました。

 


 

posted @ 2:40 | Feedback (680)