fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <memory>
  5. #include <functional>
  6. #include <typeinfo>
  7.  
  8. class Base { public: virtual ~Base() = 0; };
  9. Base::~Base() { }
  10.  
  11. class Class1 : public Base { };
  12. class Class2 : public Base { };
  13. class ClassN : public Base { };
  14.  
  15. std::vector<std::function<std::shared_ptr<Base> ()>> CtorList = {
  16. [] { return std::shared_ptr<Base>(new Class1); },
  17. [] { return std::shared_ptr<Base>(new Class2); },
  18. [] { return std::shared_ptr<Base>(new ClassN); },
  19. };
  20.  
  21. int main()
  22. {
  23. int i;
  24.  
  25. do
  26. {
  27. std::cout << "input: ";
  28. std::cin >> i;
  29. } while (i >= 3);
  30.  
  31. auto base = CtorList[i]();
  32. std::cout << typeid(*base).name() << std::endl;
  33. }
  34.  
Success #stdin #stdout 0s 3480KB
stdin
1
stdout
input: 6Class2