std::binder1st 等の組合せで出来そうで出来ない(かな?)
std:for_each の predicate に、以下のような関数が"標準のバインダの組合せだけで"指定できるのか否かがわからない ;-<
誰か教えて!
- メンバ関数のポインタで
- メンバ関数の戻り値は voidで
- メンバ関数の第1引数の型は std::for_each を適用するコンテナの value_type
- メンバ関数の第2引数の型は任意でメンバ関数のポインタと共に渡したい
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)); }