boost::bind

boost::function の引数を自由に設定することが出来る。

#include <boost/function.hpp>
#include <boost/functional.hpp>
#include <boost/bind.hpp>

int
division(int n, int m){
    return n / m;
}

int
main(){
    
    // あらかじめ引数を設定することが出来る
    boost::function<int()> div_6_3 = boost::bind(division, 6, 3);
    assert( div_6_3() == division(6, 3) );

    // ::_1 等を設定すれば、呼び出し時にその引数の順番で渡せる
    boost::function<int(int, int)> div = boost::bind(division, ::_1, ::_2);
    assert( div(14, 7) == division(14, 7) );

    // こんなことも…
    boost::function<int(int, int)>    div2 = boost::bind(division, ::_2, ::_1);
    assert( div2(6, 18) == division(18, 6) );

    return 0;
}

あらかじめ、boost::function に引数を渡すことが出来たりします。
この時に関数の型が変わるので注意が必要。

_1 や ::_2 を使った引数の順番の操作はイメージし辛いので実際に触ってみるといいと思います。


[boost]
ver 1.44.0
[参照]
http://www.kmonos.net/alang/boost/classes/bind.html