std::binder1st 等の組合せで出来そうで出来ない(かな?)

std:for_each の predicate に、以下のような関数が"標準のバインダの組合せだけで"指定できるのか否かがわからない ;-<
誰か教えて!

std::bind1st とかの組合せでがんばってみたけど出来ないっす。

専用の Predicate を書くとすると、こんな感じ。

template <class ObjType, class ReturnType, class Arg1Type, class Arg2Type>
class Pred
{
  typedef ReturnType (ObjType::*MemFunType)(Arg1Type, Arg2Type);

  ObjType*    mpObj;
  MemFunType  mpFun;
  Arg2Type    mArg2;
public:
  Pred(ObjType* pObj, MemFunType pFun, Arg2Type arg2)
    : mpObj(pObj), mpFun(pFun), mArg2(arg2) {}

  void operator()(Arg1Type e) { (mpObj->*mpFun)(e, mArg2); }
};

使うときはこんな感じ。

void Something::Fun()
{
  std::vector<short> ss;
  :
  std::for_each(ss.begin(), ss.end(),
      Pred<Class, void, int, Visitor*>(&obj, &Class::Fun, this));
}