1 #ifndef CHANPROJECT_VECTOR2D_H 2 #define CHANPROJECT_VECTOR2D_H 3 #include "ChanGlobal.h" 4 5 namespace Common{ 6 template <typename T> 7 class Vector2D{ 8 public: 9 Vector2D() = default; 10 virtual ~Vector2D() = default; 11 /** 12 * @brief 构造函数 13 * @param x x的值 14 * @param y y的值 15 * @since 1.0.0 16 */ 17 Vector2D(const T& x, const T& y){ 18 this->m_X = x; 19 this->m_Y = y; 20 } 21 /** 22 * @brief 返回点的x值 23 * @return 该点的x值 24 * @since 1.0.0 25 */ 26 ChanNodiscard T x() const{ 27 return m_X; 28 } 29 /** 30 * @brief 设置点的x值 31 * @param x 要赋值给x的值 32 * @since 1.0.0 33 */ 34 void setX(const T& x){ 35 m_X = x; 36 } 37 /** 38 * @brief 返回点的y值 39 * @return 该点的y值 40 * @since 1.0.0 41 */ 42 ChanNodiscard T y() const{ 43 return m_Y; 44 } 45 /** 46 * @brief 设置点的x值 47 * @param y 要赋值给y的值 48 * @since 1.0.0 49 */ 50 void setY(const T& y){ 51 m_Y = y; 52 } 53 /** 54 * @brief 比较两个对象是否相等 55 * @param p 要比较的对象 56 * @param sameWith 比较函数 57 * @note 如果比较函数‘sameWith’为nullptr,则使用“==”比较 58 * @return 59 */ 60 bool sameWith(Vector2D<T> *p, bool (*sameWith)(T,T)) const{ 61 if(sameWith == nullptr){ 62 return (m_X == p->m_X) && (m_Y == p->m_Y); 63 }else if(sameWith(m_X, p->m_X) && sameWith(m_Y, p->m_Y)){ 64 return true; 65 }else{ 66 return false; 67 } 68 }; 69 70 protected: 71 /** 72 * @brief [me]的x值 73 * @since 1.0.0 74 */ 75 T m_X = 0.0; 76 /** 77 * @brief [me]的y值 78 * @since 1.0.0 79 */ 80 T m_Y = 0.0; 81 }; 82 } 83 #endif //CHANPROJECT_VECTOR2D_H