fork download
  1. #include <iostream>
  2.  
  3. struct None
  4. {
  5. };
  6.  
  7. template<int val, class link>
  8. struct TNode
  9. {
  10. enum { value = val };
  11. typedef link next;
  12. };
  13.  
  14. enum
  15. {
  16. Car,
  17. Boat,
  18. Heli,
  19. Plane
  20. };
  21.  
  22. typedef TNode<Car, TNode<Boat, TNode<Heli, TNode<Plane, None> > > > Vechicles;
  23.  
  24. void RegisterVechicle(int i)
  25. {
  26. std::cout<< "registered: " << i << std::endl;
  27. }
  28.  
  29. template<typename T>
  30. struct Register
  31. {
  32. static inline void Do()
  33. {
  34. RegisterVechicle(T::value);
  35. Register<typename T::next>::Do();
  36. }
  37. };
  38.  
  39. template<>
  40. struct Register<None>
  41. {
  42. static inline void Do()
  43. {
  44. }
  45. };
  46.  
  47. int main()
  48. {
  49. Register<Vechicles>::Do();
  50. return 0;
  51. }
Success #stdin #stdout 0.02s 2680KB
stdin
Standard input is empty
stdout
registered: 0
registered: 1
registered: 2
registered: 3