Advertisement
Guest User

Untitled

a guest
Jan 26th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <array>
  4.  
  5. namespace at {
  6.  
  7. template <typename T, int nDimensions>
  8. class Point {
  9. public:
  10.   Point<T, nDimensions>() : elements_() {}
  11.   virtual ~Point<T, nDimensions>() = default;
  12.  
  13.   virtual T& operator[](const int i) {
  14.     return elements_[i];
  15.   }
  16.  
  17.   virtual const T& operator[](const int i) const {
  18.     return elements_[i];
  19.   }
  20.  
  21.   virtual Point<T, nDimensions>& operator+=(const Point<T, nDimensions>& other) {
  22.     for (int i = 0; i < nDimensions; i++) {
  23.       elements_[i] += other.elements_[i];
  24.     }
  25.     return *this;
  26.   }
  27.  
  28.   virtual Point<T, nDimensions>& operator-=(const Point<T, nDimensions>& other) {
  29.     for (int i = 0; i < nDimensions; i++) {
  30.       elements_[i] -= other.elements_[i];
  31.     }
  32.     return *this;
  33.   }
  34.  
  35.   virtual Point<T, nDimensions>& operator=(const Point<T, nDimensions>&& other) {
  36.     elements_ = std::move(other.elements_);
  37.     return *this;
  38.   }
  39.  
  40.   friend Point<T, nDimensions> operator+(Point<T, nDimensions> lhs, const Point<T, nDimensions>& rhs) {
  41.     return lhs += rhs;
  42.   }
  43.  
  44. protected:
  45.   std::array<T, nDimensions> elements_;
  46. };
  47.  
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement