できたー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