通过C ++模板实现矩阵

时间:2018-10-27 14:44:51

标签: c++ templates matrix

如上所述,但是我通过模板参数定义矩阵维。当我尝试实现矩阵乘法时,会遇到一些麻烦。我的矩阵乘法原型如下:

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的第三个模板参数?我只能定义一个新的模板参数,但这太糟糕了。

1 个答案:

答案 0 :(得分:0)

在矩阵乘法中,两个矩阵之间应该共有一个“大小”,因此某些命名选择可能会造成混淆。

使用非成员功能,可能更容易理解,您期望的签名将是:

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
};