模板函数重载 C++

template function overloading c++

我正在研究通用矩阵 class。 我要重载 + 函数,以便什么时候执行:

  1. 矩阵=标量*矩阵
  2. 矩阵=矩阵*标量
  3. 矩阵=矩阵*矩阵

尝试这样做(函数重载): 这是正确的方法吗?

template<class T>
class Matrix
{
    std::vector< std::vector<T> > mat;
    size_t rows , cols;

public:
    Matrix(){}
    Matrix(const std::string){  }
    Matrix(const size_t r, const size_t c, const std::vector<T> v){ }
    Matrix(const Matrix& other);

    Matrix<T> operator=(const Matrix<T> &other)  {  }

    Matrix<T> operator+(const Matrix<T> &other) const{}

    friend Matrix<T> operator*(const T &mat, const Matrix<T> &scalar) { }

    friend Matrix<T> operator*(const Matrix<T> &mat, const T &scalar) { }

    friend Matrix<T> operator*(const Matrix<T> &mat, const Matrix<T> &other) {  }

另外,我很高兴知道我的声明是否存在问题。 感谢您的帮助。

看了题,有了另类的想法。

matrix = scalar * matrix
matrix = matrix * scalar
matrix = matrix * matrix

另一种方法是使用函数对象并将它们传递给矩阵 class,这样函数对象就可以处理算法细节...这允许您在以后需要时添加更多。

运算符链接在上面的代码中也很方便,因此,return 通过引用重载运算符。

如果你想重载operator*允许

  1. 矩阵=标量*矩阵
  2. 矩阵=矩阵*标量
  3. 矩阵=矩阵*矩阵

您需要将这三个运算符重载定义为矩阵周围命名空间中的函数 class:

class Matrix { ... };
Matrix operator*(Scalar const& s, Matrix const& m) { ... }
Matrix operator*(Matrix const& m, Scalar const& s) { ... }
Matrix operator*(Matrix const& m1, Matrix const& m2) { ... }

在您的例子中,您在 class 中将运算符声明为 friend 函数,这也是一样的,因为它实际上声明了自由函数 他们 friends。如果确实需要 friend ,则取决于实现。如果不是,为了清楚起见,我会将它们移到 class 之外,但请记住,那时您将需要 template<typename T>。关于其余的代码,没有任何明显的损坏,但无论如何它只是真实代码的摘录。