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にした方がいい所の境目には気をつけたいなぁ。