fork download
  1. #include <iostream>
  2. #include <tuple>
  3.  
  4. namespace static_iterator
  5. {
  6. template <int... Idx>
  7. struct index { };
  8.  
  9. template <int N, int... Idx>
  10. struct sequence : sequence<N - 1, N - 1, Idx...> { };
  11.  
  12. template <int... Idx>
  13. struct sequence<0, Idx...> : index<Idx...> { };
  14. }
  15.  
  16.  
  17.  
  18. struct A {void prnt(){std::cout<<"A\n";} };
  19. struct B {void prnt(){std::cout<<"B\n";} };
  20. struct C {void prnt(){std::cout<<"C\n";} };
  21.  
  22. template<typename...Arg>
  23. class HeterogenousContainer
  24. {
  25. public:
  26. HeterogenousContainer() :
  27. number_elems(sizeof...(Arg)){}
  28.  
  29. std::tuple<Arg...> elements;
  30.  
  31. template <int... Idx>
  32. void process(static_iterator::index<Idx...>)
  33. {
  34. auto aux = { (std::get<Idx>(elements).prnt(), 0) ... };
  35. }
  36.  
  37. void process()
  38. {
  39. process(static_iterator::sequence<sizeof...(Arg)>());
  40. }
  41.  
  42. unsigned int get_number_elements(){return number_elems;}
  43.  
  44. private:
  45. unsigned int number_elems;
  46. };
  47. int main()
  48. {
  49. HeterogenousContainer<A,B,C,A,A,B,C,B,B,C> obj;
  50. obj.process();
  51. }
Success #stdin #stdout 0s 2852KB
stdin
Standard input is empty
stdout
A
B
C
A
A
B
C
B
B
C