タイトルの項目で苦戦してました。^^; 以下実験結果。
class A
{
public:
template<typename T>
void Func(T& fnBinFunc);
};
class BinFunc; // operator() が定義されている
vector<A*> stlList; // 適当に内容挿入
こんなのがあった時、A::Func を for_each で呼び出したかったのです。これが上手くいかず試行錯誤していました。
for_each(stlList.begin(), stlList.end(),
bind2nd(mem_fun(&A::Func), BinFunc()));
for_each(stlList.begin(), stlList.end(),
boost::bind(&A::Func, _1, BinFunc()));
当初は単純に上記のように書いていたのですが、これでは大量のエラーが報告されてしまいます。
メンバテンプレート関数は for_each で呼び出せないのかっ…? と思ったんですが、実は呼び出せました。
for_each(stlList.begin(), stlList.end(),
boost::bind<void, A, BinFunc&>(&A::Func<BinFunc>, _1, BinFunc()));
こんな感じで。 boost::bind() にも明示的な型指定が必要だったとは……うむむ〜ん。(ちなみに、STL Onlyでやる場合ってのは、よくわからず…)
boost 入門者の私にはコレを導き出すのに一杯一杯でしたが、実はもっと楽な方法とかあったりするんでしょーかねぇ…。
>ツッコミよろしくです^^;