visit.cpp 922 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "write-copy.h"
  2. #ifdef _TEST_
  3. struct card
  4. {
  5. int id;
  6. card(int _id):id(_id){}
  7. };
  8. struct card_list:single_base<card_list,int,std::shared_ptr<card>>
  9. {
  10. void accept(visitor<std::shared_ptr<card>>&v)
  11. {
  12. for(std::pair<int,std::shared_ptr<card>> me:m_map)
  13. {
  14. v.visit(me.second);
  15. }
  16. }
  17. };
  18. struct visit_log:visitor<std::shared_ptr<card>>
  19. {
  20. bool visit(std::shared_ptr<card> c)
  21. {
  22. printf("%d\n",c->id);
  23. return true;
  24. }
  25. };
  26. template<> std::shared_ptr<card_list> single_base<card_list,int,std::shared_ptr<card>>::m_instance=std::make_shared<card_list>();
  27. int main()
  28. {
  29. std::vector<std::shared_ptr<card_list>> v;
  30. for(int i=0;i<100;i++)
  31. {
  32. card_list::instance()->add(i,std::make_shared<card>(i));//每次生成一个对象
  33. v.push_back(card_list::instance());
  34. }
  35. for(int i=0;i<100;i++)
  36. {
  37. printf("%d %p\n",i,v[i].get());
  38. }
  39. visit_log vl;
  40. card_list::instance()->accept(vl);
  41. return 0;
  42. }
  43. #endif