123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "write-copy.h"
- #ifdef _TEST_
- struct card
- {
- int id;
- card(int _id):id(_id){}
- };
- struct card_list:single_base<card_list,int,std::shared_ptr<card>>
- {
- void accept(visitor<std::shared_ptr<card>>&v)
- {
- for(std::pair<int,std::shared_ptr<card>> me:m_map)
- {
- v.visit(me.second);
- }
- }
- };
- struct visit_log:visitor<std::shared_ptr<card>>
- {
- bool visit(std::shared_ptr<card> c)
- {
- printf("%d\n",c->id);
- return true;
- }
- };
- template<> std::shared_ptr<card_list> single_base<card_list,int,std::shared_ptr<card>>::m_instance=std::make_shared<card_list>();
- int main()
- {
- std::vector<std::shared_ptr<card_list>> v;
- for(int i=0;i<100;i++)
- {
- card_list::instance()->add(i,std::make_shared<card>(i));//每次生成一个对象
- v.push_back(card_list::instance());
- }
- for(int i=0;i<100;i++)
- {
- printf("%d %p\n",i,v[i].get());
- }
- visit_log vl;
- card_list::instance()->accept(vl);
- return 0;
- }
- #endif
|