C++で関数プログラミング

必要にせまられ(無理やり必要を捏造しw)Boostのfunctor系ライブラリを使い始める.
boost::functionはただのfunctorのtemplateといったところか.とはいえgenericな形で可変項数に対応しているのは当然で,引数の型指定に新しいtemplateの記法を採用していたりするからやはり変態・・・というか,正直「そんな記法あったんかいな」が第1印象w.関数オブジェクト,関数ポインタ,関数参照,メンバ関数ポインタをgenericにwrapできる点も大きい.ここら辺は内部でtraitsを使い倒しているんだろうと勝手に予測.
boost::bind, boost::mem_funあたりはinterface matchさせるためのただの関数アダプタ(functor wrapper)ですな.しかしbindではplaceholderが使えたりとやはり凶悪な自由度がある.
MC++D(Loki)にもそれなりの実装があるけれど,上記の点でBoostの実装がさらに2回りほど上(というか斜め上w)を逝ってる感じ.少なくとも標準ライブラリの関数アダプタには絶対戻れませんね.
boost::signalもチラッと覗いてみたが,複数のメソッド呼び出しをオブジェクトに引き上げたもの,ってところかな?
boost::lambdaあたりになってくるといつものように変態と呼びたくなってくるがw.まさに高階関数ライブラリと呼べる代物になってる.C++ in C++という言葉は言いえて妙だと思いますた.
で,こういうのを突き詰めていくと最終的には以下のようなところに逝きつくわけでw
http://www.cc.gatech.edu/~yannis/fc++/
C++はマルチパラダイム言語だとよく言われるが,関数型言語としても使おうとするのはさすがに変態の中の変態というか・・・アホ?(←それでも褒め言葉)