bindでちょっと試し書き

てすとてすと


こんなのがありまして

struct Hoge
{
    void func1()const{/*hoge*/}
    void func2(int a,int b)const{/*hoge*/}
};


vectorとかだったら

vector<Hoge> v;

//要素追加とかして

for_each( v.begin() , v.end() , boost::mem_fn( &Hoge::func ) );

まぁこれは普通。


func2みたいに複数の引数を持つメンバ関数を呼び出そうとする時はbindを使えばok

for_each( v.begin() , v.end() , boost::bind( &Hoge::func2 , _1 , 1 ,2) );


もしvectorじゃなくてmapだったらややこいというかいみわからん

typedef map<string,Hoge> HogeMap;
HogeMap m;

//要素追加とかして

for_each( m.begin() , m.end() , boost::bind( &Hoge::func2, boost::bind( &HogeMap::value_type::second , _1 ) , 1 , 2 ) );

もうイミフ


bindからうまれた関数が何かぐらいは分かるようにしないとなぁ

boost::function< void ( HogeMap::value_type ) > fun =
    boost::bind( &Hoge::func2, boost::bind( &HogeMap::value_type::second , _1 ) , 1 , 2 );
for_each( m.begin() , m.end() , fun );


そしてどんどんコンパイルエラーが意味難解になってゆく。


最近こんな感じのが多くなってきて徐々に感覚が麻痺してる。
素直にforにした方がいい所の境目には気をつけたいなぁ。