fork download
  1. #include <cstdio> // for printf.
  2.  
  3. struct b
  4. {
  5. virtual void f() { std::printf("in b\n"); }
  6. };
  7.  
  8. struct d1 : b
  9. {
  10. virtual void f() override { std::printf("in d1\n"); }
  11. };
  12.  
  13. struct d2 : b
  14. {
  15. virtual void f() override { std::printf("in d2\n"); }
  16. };
  17.  
  18. struct unko_f final
  19. {
  20. b *pb;
  21. unko_f(b *pb) : pb(pb) {}
  22. void operator=(b *pb) { this->pb = pb; }
  23.  
  24. void operator()() { this->pb->f(); }
  25. };
  26.  
  27. struct unko_del final
  28. {
  29. b *pb;
  30. void (b::*pbf)();
  31.  
  32. unko_del(b *pb, void (b::*pbf)()) : pb(pb), pbf(pbf) {}
  33.  
  34. void operator()() { ( (this->pb) ->* (this->pbf) ) (); }
  35. };
  36.  
  37. int main()
  38. {
  39. d1 i1;
  40. unko_f kusof(&i1);
  41. kusof();
  42.  
  43. d2 i2;
  44. kusof = &i2;
  45. kusof();
  46.  
  47. unko_del del1(&i1, &b::f);
  48. del1();
  49.  
  50. std::getchar();
  51. }
  52.  
Success #stdin #stdout 0s 2856KB
stdin
Standard input is empty
stdout
in d1
in d2
in d1