fork download
  1. #include <iostream>
  2. #include <tuple>
  3.  
  4. class A
  5. {
  6. public:
  7. void doIt() { std::cout << "A" << std::endl; }
  8. };
  9.  
  10. class B
  11. {
  12. public:
  13. void doIt() { std::cout << "B" << std::endl; }
  14. };
  15.  
  16. class Visitor {
  17. public:
  18. template <class C>
  19. void operator()(C &c)
  20. {
  21. c.doIt();
  22. }
  23. };
  24.  
  25. template <class F, class C>
  26. void
  27. visitAll(F visitor, C &&c)
  28. {
  29. visitor(c);
  30. }
  31.  
  32. template <class F, class C, class... Args>
  33. void
  34. visitAll(F visitor, C &&c, Args... A)
  35. {
  36. visitor(c);
  37. visitAll(visitor, A...);
  38. }
  39.  
  40. int
  41. main(int argc, char *argv[])
  42. {
  43. visitAll(Visitor(), A(), B());
  44. return 0;
  45. }
  46.  
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
A
B