【问题标题】:operation overloading * (both left side and right side) with template带有模板的操作重载*(左侧和右侧)
【发布时间】:2016-05-29 16:37:48
【问题描述】:

我有一个班级垫

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

而且我有语法错误...

在网上找不到任何示例...知道如何编写吗?

【问题讨论】:

  • MatMatrix&lt;A_Type,sizeA,sizeB&gt; 实际上有什么关系?
  • “我有语法错误...” 请始终在您的问题中逐字提供编译器错误。此外,您应该始终提供代码的minimal reproducible example,以重现问题。

标签: c++ class templates operator-overloading


【解决方案1】:

现在我需要它同时使用 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);     
     }
};

【讨论】:

  • @JohnnyF 当然我确定。你可能实现了这个错误。想要完整的样本?
  • 全局操作符重载通常在模板中表现不佳:也许改用基于 koenig adl 的朋友?
  • @Yakk “也许改用基于 koenig adl 的朋友?” 我不知道那种模式,你想写一个答案(或编辑我的)?
  • 呸,你已经做到了。适合我阅读前几行。
  • 只是为了理解,我可以只做全局重载,还是在类内我必须添加一个朋友blabla?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多