パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

boost::bind

以前書いた関数オブジェクトを使う実装は 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 を渡してるもんね)便利便利。

まだまだ知らないことがたくさん。ていうかこんな基本的なことも知らないのかとか言われそう。