c++全局运算符不能很好地与模板类一起使用

标签 c++ generics templates function

好的,我在 stackoverflow 上找到了一些类似的帖子,但我找不到任何与我的具体情况相关的帖子,而且我对给出的一些答案感到困惑。好的,这是我的问题:

我有一个模板矩阵类如下:

    template <typename T, size_t ROWS, size_t COLS>
    class Matrix
    {
 public:

  template<typename, size_t, size_t>
  friend class Matrix;

  Matrix( T init = T() )
   : _matrix(ROWS, vector<T>(COLS, init))
  {
   /*for( int i = 0; i < ROWS; i++ )
   {
    _matrix[i] = new vector<T>( COLS, init );
   }*/
  }

  Matrix<T, ROWS, COLS> & operator+=( const T & value )
  {
   for( vector<T>::size_type i = 0; i < this->_matrix.size(); i++ )
   {
    for( vector<T>::size_type j = 0; j < this->_matrix[i].size(); j++ )
    {
     this->_matrix[i][j] += value;
    }
   }
   return *this;
  }

 private:
  vector< vector<T> > _matrix;
    };

我有以下全局函数模板:

    template<typename T, size_t ROWS, size_t COLS>
    Matrix<T, ROWS, COLS> operator+( const Matrix<T, ROWS, COLS> & lhs,
        const Matrix<T, ROWS, COLS> & rhs )
    {
     Matrix<T, ROWS, COLS> returnValue = lhs;
     return returnValue += lhs;
    }

对我来说,这似乎是对的。但是,当我尝试编译代码时,出现以下错误(由 operator+ 函数引发):

binary '+=' : no operator found which takes a right-hand operand of type 'const matrix::Matrix<T,ROWS,COLS>' (or there is no acceptable conversion)

我不知道该怎么做。如果非常感谢任何帮助!

最佳答案

你的 operator+=这里:

Matrix<T, ROWS, COLS> & operator+=( const T & value )

定义了一个添加 T 的方法(标量)到 Matrix<T, ROWS, COLS> .

这个声明:

return returnValue += lhs;

尝试添加 Matrix<T, ROWS, COLS> (矩阵,类型 lhs )到 Matrix<T, ROWS, COLS> .

所以编译器说你没有定义那个操作是完全正确的。你有一个 operator+=将标量添加到矩阵,但不是 operator+=将矩阵添加到矩阵。

关于c++全局运算符不能很好地与模板类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549856/

相关文章:

c++ - 将临时值存储为某种数据类型时,算术运算的标准规则是什么?

c++ - 访问使用 pinned_allocator 分配的 host_vector 项(推力库)

c# - 通用 Property.GetSetMethod 的委托(delegate)

templates - 如何在 Go 中使用 Blackfriday 将 markdown 渲染为 html?

C++ 创建一个每个节点超过 2 个字段的链表

c++ - 在 QT 中创建带有表单的 Widget 时递归构造函数调用?

Java - 泛型说明

Java 泛型传递 .class 引用

c++ - 在 C++ 中,如何创建从 T 到 T* 的转换?

c++ - 为什么不将类型名模板参数隐式识别为类型?