boost user - bind and mem_fn

since: 2002-08-28 update: 2002-08-28 count:

さて、いよいよ boost 本領発揮。 関数アダプタ第二号です。 サンプルコード。

bindmemfnTest.cc

まあ、使い方はサンプル見ればわかると思うんだけどなあ。 使うだけならそんなに難しくない、はず。

まず、カリー化を知ってるとわかりやすいと思います。 やねうらお氏 がわかりやすい説明して下さっているので、 見て下され。

まず、mem_fn が何をやっているかですが、 メソッドが . 演算子で呼びだすものなら、mem_fun_ref相当の動作を、 -> 演算子で呼びだすものなら、mem_fun相当の動作をします。 まあ、テンプレート特別バージョンの守備範囲。 この時、STLのものと違い、引数の個数が二個以上でも OK です。

次、bind。 第一引数に関して、メソッドなら自動的に mem_fn を適用します。 これもテンプレート特別バージョン。

第二引数以降は、関数なら引数の個数、メソッドなら引数の個数+1個の 引数を指定します。

これらの引数には、bindしたい値か、_1, _2, _3, ... を指定します。 bindしたい引数が、参照なら、boost::ref で包みます。

で、_1, _2, _3, ... で指定した部分が、 boost::bindの返す関数オブジェクトの引数になります。 つまり

(任意引数個の関数) => (任意引数個以下の引数個の関数)

という変換をやってくれるわけです。 ああ、ちなみに引数の個数は減らないのもアリです。 (サンプルコードの最後の例)

これで、ああ、カリー化やねえ、と理解してくれないと、 これ以上の説明は凄く長くなりそうできついっす。 すいません。

ちなみにこれ使うとコンパイルが異常に遅くなります。


home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h