用c++模板实现矩阵

Implement matrix by c++ template

本文关键字:实现 c++      更新时间:2023-10-16

如上所述,但我通过模板参数定义矩阵维度。当我尝试实现矩阵乘法时,会出现一些问题。我的矩阵乘法原型如下:

matrix_array<class __item__, std::size_t ROW, std::size_t COL>;
matrix_array<__item__, ROW, COL> operator* (
const matrix_array<__item__, COL, >& b) const;

所以有一个问题,如何传递矩阵b的第三个模板参数?我可以定义一个新的模板参数,但它太可怕了。

在矩阵乘法中,两个矩阵之间应该共用一个"size",因此一些命名选择可能会令人困惑。

对于非成员函数,可能更容易理解,您期望的签名是:

template <typename T, std::size_t ROW, size_t K, size_t COLUMN>
Matrix<T, ROW, COLUMN> operator * (const Matrix<T, ROW, K>& lhs,
const Matrix<T, K, COLUMN>& rhs);

因此,作为成员,lhs将是*this:

template <typename T, std::size_t ROW, size_t COL /*K*/>
class Matrix
{
// ...
template <size_t COLUMN>
Matrix<T, ROW, COLUMN> operator * (const Matrix<T, COL, COLUMN>& rhs) const;
// "confusing" name: rhs has 2 "column" names
};