如上所述,但是我通过模板参数定义矩阵维。当我尝试实现矩阵乘法时,会遇到一些麻烦。我的矩阵乘法原型如下:
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
的第三个模板参数?我只能定义一个新的模板参数,但这太糟糕了。
答案 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
};