fork download
  1. #include <string>
  2. #include <vector>
  3. #include <memory>
  4. #include <algorithm>
  5. #include <iostream>
  6.  
  7. struct Base
  8. {
  9. typedef std::shared_ptr<Base> SharedPtr;
  10. virtual ~Base(){}
  11. virtual void print(){}
  12. template<class T>
  13. static SharedPtr makeDerived(const std::string& name);
  14.  
  15. static std::vector<SharedPtr> objs;
  16. };
  17. std::vector<Base::SharedPtr> Base::objs;
  18. template<class T>
  19. struct Derived : public Base
  20. {
  21. Derived(const std::string& name):name(name){}
  22. void print(){std::cout<<name<<std::endl;}
  23. std::string name;
  24. };
  25.  
  26. template<class T>
  27. Base::SharedPtr Base::makeDerived(const std::string& name)
  28. {
  29. SharedPtr p = std::make_shared<Derived<T> >(Derived<T>(name));
  30. objs.push_back(p);
  31. return p;
  32. }
  33.  
  34. int main()
  35. {
  36. Base::makeDerived<bool>("online");
  37. Base::makeDerived<int>("users");
  38. std::for_each(Base::objs.begin(),Base::objs.end(),[](Base::SharedPtr p){p->print();});
  39. }
Success #stdin #stdout 0s 3036KB
stdin
Standard input is empty
stdout
online
users