fork download
  1. #include <iostream>
  2. #include <functional>
  3. #include <memory>
  4.  
  5. class A {
  6. public:
  7. virtual void operator()() {
  8. std::cout << "classA" << std::endl;
  9. }
  10. virtual ~A() {}
  11. };
  12.  
  13. class B : public A {
  14. public:
  15. void operator()() {
  16. std::cout << "classB" << std::endl;
  17. }
  18. };
  19.  
  20. class C : public B {
  21. public:
  22. void operator()() final {
  23. std::cout << "classC" << std::endl;
  24. }
  25. };
  26.  
  27. int main()
  28. {
  29. std::shared_ptr<A> a(new A);
  30. std::shared_ptr<A> b(new B);
  31. std::shared_ptr<A> c(new C);
  32.  
  33. std::function<void(void)>func[] = {
  34. std::bind(std::mem_fn(&A::operator()), a),
  35. std::bind(std::mem_fn(&A::operator()), b),
  36. std::bind(std::mem_fn(&A::operator()), c),
  37. };
  38.  
  39. for (auto a : func)
  40. a();
  41. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
classA
classB
classC