fork download
  1. #include <iostream>
  2.  
  3. struct Base
  4. {
  5. void beginEvent(int a)
  6. {
  7. impl(a, &Base::onBeginEvent, &Base::onBeginEvent);
  8. }
  9.  
  10. void endEvent(int a)
  11. {
  12. impl(a, &Base::onEndEvent, &Base::onEndEvent);
  13. }
  14.  
  15. void impl(int a, void (Base::*func1)(int), void (Base::*func2)(int, int))
  16. {
  17. (this->*func1)(a);
  18. (this->*func2)(a, -a);
  19. }
  20.  
  21. virtual void onBeginEvent(int a){}
  22. virtual void onBeginEvent(int a, int negativeA){}
  23. virtual void onEndEvent(int a){}
  24. virtual void onEndEvent(int a, int negativeA){}
  25. };
  26.  
  27. struct Derived : public Base
  28. {
  29. void onBeginEvent(int a) { std::cout << a << "\n"; }
  30. void onEndEvent(int a, int b) { std::cout << a << "==(-(" << b << "))\n"; }
  31. };
  32.  
  33. int main()
  34. {
  35. Derived d;
  36.  
  37. d.beginEvent(3);
  38. d.endEvent(9);
  39.  
  40. return 0;
  41. }
Success #stdin #stdout 0.01s 2680KB
stdin
Standard input is empty
stdout
3
9==(-(-9))