【Bind】【Lambda】 Processing containers of pointers
らしい。
mem_fn的なことはしてくれないのか、と思ったらポインタはできるのね。
#include <vector> #include <boost/shared_ptr.hpp> #include <boost/lambda/bind.hpp> #include <algorithm> struct hoge { void f() {} }; int main() { using namespace boost::lambda; std::vector<hoge> vh; std::vector<hoge*> vp; std::vector<boost::shared_ptr<hoge> > vs; std::for_each(vh.begin(), vh.end(), bind(&hoge::f, _1)); // OK std::for_each(vp.begin(), vp.end(), bind(&hoge::f, _1)); // OK // std::for_each(vs.begin(), vs.end(), bind(&hoge::f, _1)); // エラー }
boost::bindではできるのに。
#include <vector> #include <algorithm> #include <boost/shared_ptr.hpp> #include <boost/bind.hpp> struct hoge { void f() {} }; int main() { std::vector<hoge> vh; std::vector<hoge*> vp; std::vector<boost::shared_ptr<hoge> > vs; std::for_each(vh.begin(), vh.end(), boost::bind(&hoge::f, _1)); // OK std::for_each(vp.begin(), vp.end(), boost::bind(&hoge::f, _1)); // OK std::for_each(vs.begin(), vs.end(), boost::bind(&hoge::f, _1)); // OK }