fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void print0() { printf("0\n"); }
  5. void print1() { printf("1\n"); }
  6. void print2() { printf("2\n"); }
  7. void print3() { printf("3\n"); }
  8.  
  9. typedef void(*ActionFunction)();
  10.  
  11. bool _menu(int condition, int action_counter, ActionFunction action)
  12. {
  13. if (action_counter == condition) {
  14. action();
  15. return true;
  16. } else {
  17. return false;
  18. }
  19. }
  20. template<typename... Args>
  21. bool _menu(int condition, int action_counter, ActionFunction action, Args... args)
  22. {
  23. if (action_counter == condition) {
  24. action();
  25. return true;
  26. }
  27. return _menu(condition, ++action_counter, args...);
  28. }
  29. template<typename... Args>
  30. bool menu(int condition, ActionFunction action, Args... args)
  31. {
  32. return _menu(condition, 0, action, args...);
  33. }
  34.  
  35. int main() {
  36. menu(1, print0, print1, print2, print3);
  37. menu('2' - 48, print0, print1, print2, print3);
  38. menu(getchar() - 48, print0, print1, print2, print3);
  39. return 0;
  40. }
Success #stdin #stdout 0s 3472KB
stdin
3
stdout
1
2
3