できたーww
一つ目はできたーw
#include <iostream> #include <map> #include <vector> #include <algorithm> #include <boost/bind.hpp> struct test { void show(int x) const{ std::cout << x << std::endl; } }; int main(){ typedef std::map<int, object> my_map; typedef my_map::value_type my_pair; std::map<int, test> m; // まぁこの例だとstd::mapの意味はないですがw m[0] = test(); m[1] = test(); m[2] = test(); // これはできた(5はてきとう) std::for_each(m.begin(), m.end(), boost::bind(&test::draw, boost::bind(&my_pair::second, _1), 5)); typedef std::map<int, test>::const_iterator map_it_t; vector<map_it_t> v; for(map_it_t it = m.begin(); it != m.end(); ++it) v.push_back(it); // これはまだ std::for_each(v.begin(), v.end(), boost::bind(&(std::vector<map_it_t>::iterator_type?::...::draw), _1, t)); return 0; }
ほぼ同じ質問がboostのmailing listのarchivesにありました.
内側でsecondを取り出し,外側でcallしてるらしい(大体分かる).
その例はstd::map
boost::shared_ptr<>をかんでるのに同じ仕組みでできるとはすごいなぁ.
下の方も同じ考え方でできそうだけど寝ますw