操作重载*(左侧和右侧)与模板

时间:2016-05-29 16:37:48

标签: c++ class templates operator-overloading

我有一个Mat类

template <class A_Type,int sizeA,int sizeB>
class Matrix {

 ..
..
..
   Matrix operator*(int elem){
        Matrix res = *this;
        res.multiWith(elem);
        return res;
   }
};

现在我需要它来使用Mat * 2和2 * Mat

我的语法错误...

无法在网上找到任何示例......任何想法如何写出来?

1 个答案:

答案 0 :(得分:3)

  

现在我需要它来使用Mat * 2和2 * Mat

您编写了一个全局运算符重载:

 template<class A_Type,int sizeA,int sizeB>
 Matrix<A_Type,sizeA,sizeB> operator*(int,const Matrix<A_Type,sizeA,sizeB>&);

 template<class A_Type,int sizeA,int sizeB>
 Matrix<A_Type,sizeA,sizeB> operator*(const Matrix<A_Type,sizeA,sizeB>&,int);

类似的东西:

template <class A_Type,int sizeA,int sizeB>
class Matrix {

     template<class U_Type,int sizeX,int sizeX>
     friend Matrix<U_Type,sizeX,sizeY> operator*(int elem,const Matrix<U_Type,sizeX,sizeY>& m) {
        Matrix<U_Type,sizeX,sizeY> res = m;
        res.multiWith(elem);
        return res;     
     }

     template<class U_Type,int sizeX,int sizeX>
     friend Matrix<U_Type,sizeX,sizeY> operator*(const Matrix<U_Type,sizeX,sizeY>& m, int elem) {
         return operator*(elem,m);     
     }
};