Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <array>
- namespace at {
- template <typename T, int nDimensions>
- class Point {
- public:
- Point<T, nDimensions>() : elements_() {}
- virtual ~Point<T, nDimensions>() = default;
- virtual T& operator[](const int i) {
- return elements_[i];
- }
- virtual const T& operator[](const int i) const {
- return elements_[i];
- }
- virtual Point<T, nDimensions>& operator+=(const Point<T, nDimensions>& other) {
- for (int i = 0; i < nDimensions; i++) {
- elements_[i] += other.elements_[i];
- }
- return *this;
- }
- virtual Point<T, nDimensions>& operator-=(const Point<T, nDimensions>& other) {
- for (int i = 0; i < nDimensions; i++) {
- elements_[i] -= other.elements_[i];
- }
- return *this;
- }
- virtual Point<T, nDimensions>& operator=(const Point<T, nDimensions>&& other) {
- elements_ = std::move(other.elements_);
- return *this;
- }
- friend Point<T, nDimensions> operator+(Point<T, nDimensions> lhs, const Point<T, nDimensions>& rhs) {
- return lhs += rhs;
- }
- protected:
- std::array<T, nDimensions> elements_;
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement