fork download
  1. #include <stdio.h>
  2.  
  3. struct Vector2
  4. {
  5. float X, Y;
  6. };
  7.  
  8. struct Vector3
  9. {
  10. float x, y, z;
  11. };
  12.  
  13. struct Space2
  14. {
  15. typedef Vector2 Vector;
  16. };
  17.  
  18. struct Space3
  19. {
  20. typedef Vector3 Vector;
  21. };
  22.  
  23. template<typename T>
  24. struct Overload{};
  25.  
  26. template<typename T>
  27. struct Printer
  28. {
  29. void Print();
  30. void Print(Overload<Space2>);
  31. void Print(Overload<Space3>);
  32. };
  33.  
  34. template<typename Space>
  35. struct Body : Printer<Space>
  36. {
  37. typedef typename Space::Vector vec;
  38.  
  39. vec v;
  40. };
  41.  
  42. template<typename Space>
  43. void Printer<Space>::Print(Overload<Space2>)
  44. {
  45. printf("%f", static_cast<Body<Space>*>(this)->v.X);
  46. }
  47.  
  48. template<typename Space>
  49. void Printer<Space>::Print(Overload<Space3>)
  50. {
  51. printf("%f", static_cast<Body<Space>*>(this)->v.x);
  52. }
  53.  
  54. template<typename Space>
  55. void Printer<Space>::Print()
  56. {
  57. Print(Overload<Space>());
  58. }
  59.  
  60. int main()
  61. {
  62. Body<Space2> body;
  63. body.Print();
  64. return 0;
  65. };
  66.  
  67. template
  68. struct Body<Space2>;
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
0.000000