以前書いた関数オブジェクトを使う実装は boost::bind でもっと簡単に書けることを知った。
template<typename T> void Class_A::Scanner(T func) { foreach() { func(x); } }
に対して、メンバ関数の
void Class_A::CountUp(unsigned int iIdx) { ... }
を func として渡すには、
Scanner( boost::bind(&Class_A::Countup, this, _1) );
ということでいいらしい。C++ ってこんな書き方もできるのに感動。
私の拙い理解だと、
_1, _2 は呼び出し側の想定している引数順、
bind(...) のthis 以降は呼び出される側の引数順。
メンバ関数を渡せると、中でメンバ変数にアクセスできるので(this を渡してるもんね)便利便利。
まだまだ知らないことがたくさん。ていうかこんな基本的なことも知らないのかとか言われそう。