fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <typename T>
  6. struct Coor
  7. {
  8. T x, y;
  9.  
  10. Coor(const T &a = T(), const T &b = T()) : x(a), y(b) {}
  11. };
  12.  
  13. template <typename T, int N>
  14. struct Access
  15. {
  16. const T& operator() (const Coor<T> &coor) const;
  17. };
  18.  
  19. template <typename T>
  20. struct Access<T, 0>
  21. {
  22. const T& operator() (const Coor<T> &coor) const
  23. { return coor.x; }
  24. };
  25.  
  26. template <typename T>
  27. struct Access<T, 1>
  28. {
  29. const T& operator() (const Coor<T> &coor) const
  30. { return coor.y; }
  31. };
  32.  
  33. int main()
  34. {
  35. Coor<int> coor(0, 1);
  36. Access<int, 0> x_access;
  37. Access<int, 1> y_access;
  38.  
  39. cout << x_access(coor) << ' ' << y_access(coor) << '\n';
  40. return 0;
  41. }
  42.  
  43.  
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
0 1