fork download
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. class parent {
  5. public:
  6. virtual std::string who() { return "parent"; }
  7. virtual ~parent(){}
  8. };
  9.  
  10. class child1 : public parent {
  11. public:
  12. std::string who() override { return "child1"; }
  13. };
  14.  
  15. class child2 : public parent {
  16. public:
  17. std::string who() override { return "child2"; }
  18. };
  19.  
  20. using fn_ptr = std::string (parent::*)();
  21. using parent_ptr = std::shared_ptr<parent>;
  22.  
  23. std::string run(parent_ptr x, fn_ptr fnc)
  24. {
  25. return (x.get()->*fnc)();
  26. }
  27.  
  28. int main()
  29. {
  30. parent_ptr c1 = std::make_shared<child1>();
  31. parent_ptr c2 = std::make_shared<child2>();
  32. fn_ptr who = &parent::who;
  33.  
  34. std::cout << run(c1, who) << '\n';
  35. std::cout << run(c2, who) << '\n';
  36. }
  37.  
Success #stdin #stdout 0s 4932KB
stdin
Standard input is empty
stdout
child1
child2