fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <memory>
  4. #include <random>
  5.  
  6. using namespace std;
  7.  
  8. struct GO { virtual void say_hello()=0; };
  9. struct A:GO { void say_hello() { cout<<"I'm a warefulf\n";} };
  10. struct B:GO { void say_hello() { cout<<"I'm a soldier\n";}};
  11.  
  12. template <class T>
  13. shared_ptr<GO> generator() {
  14. return make_shared<T>();
  15. };
  16.  
  17. typedef shared_ptr<GO> (*gen_fn)();
  18. vector <gen_fn> generators{generator<A>, generator<B>};
  19.  
  20. int main() {
  21. vector<shared_ptr<GO>> universe;
  22.  
  23. default_random_engine generator;
  24. uniform_int_distribution<int> distribution(0,generators.size()-1);
  25.  
  26. for (int i=0; i<10; i++) {
  27. int mytype = distribution(generator);
  28. universe.push_back(generators[mytype]());
  29. }
  30.  
  31. for (auto x: universe)
  32. x->say_hello();
  33. return 0;
  34. }
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
I'm a warefulf
I'm a warefulf
I'm a soldier
I'm a warefulf
I'm a soldier
I'm a warefulf
I'm a warefulf
I'm a soldier
I'm a soldier
I'm a soldier