スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

クロージャー

2006年05月01日 20:20

前回悩んでいたカリー化の方法なんですけど、実際やりたかったのはクロージャーでした。
C++ でこういう関数型プログラムやるのって楽しいデスネ~。難しいけど。
実装するとき、パズル組んでるみたいで勉強になりました。
テンプレートは奥が深いっす。


んで、どんな形のが出来たかっていうと、、、、


  Closure<UI>    test2  = 20;
  Closure<UI>    test3  = 100;
  Closure<UI>    test4  = &test3;
  Closure<UI>    test  = test4 + 10;      // 式を突っ込む
  Closure<BOOL>  t_1    = test2 == test3;
  Closure<BOOL>  t_2    = !t_1;

  printf( "%d, %d\n", t_1(), t_2() );        // 結果 : 0, 1


  Closure<UI>  testA  = 100;
  Closure<F4>  testB  = 1.5f;

  test3 = testA * testB;
  printf( "%d\n", test() );            // 結果 : 160
  
  test3 = test2;
  printf( "%d\n", test() );            // 結果 : 30

  
こんなのが出来ました。

要するに関数に式を突っ込んでファンクタで遅延評価させるっていうテンプレートです。

これをクロージャーっていうのかは疑問ですけど、やりたいことは Lambda みたいな関数を動的に作成してそれを再利用できるようなテンプレートってことだったのでこれでOKっす。
上の例でも式(Closure)同士を組み合わせて新しい式(Closure)を作ってるのがわかると思います。
もちろん、入れ子は何個でも階層化できます。


BOOST の Lambda を解析した結果できたクラスなんですけどね。
解析してわかったのは、BOOST の Lambda みたいのを以前(BOOST を勉強する前に)自分で組んでたのを思い出したことですw
今回はそのテンプレート(Terms って名前が付いてます)を使って書いたので思ったより簡単に出来ました。

実際、気づくまで2週間も悩んでたんですけどね orz
気づいたら2日で出来ちゃいました。思ったより簡単(´∀` )

んでは、次回からは何回かに分けてこれで培った技術なんぞを公開していこうかと思います。



blog_rank


スポンサーサイト


最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。