C++ 用c+实现矩阵+;模板
如上所述,但我是通过模板参数来定义矩阵维数的。当我尝试实现矩阵乘法时,出现了一些问题。我的矩阵乘法原型如下所示:C++ 用c+实现矩阵+;模板,c++,templates,matrix,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; 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;
matrix\u数组;
矩阵_数组运算符*(
常数矩阵(数组&b)常数;
所以有一个问题,如何传递矩阵的第三个模板参数
b
?我可以定义一个新的模板参数,但它太可怕了。在矩阵乘法中,两个矩阵之间应该有一个“大小”,所以一些命名选择可能会让人困惑
对于非成员函数,可能更容易理解,您期望的签名是:
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);
不允许在用户编写的代码中创建名称,例如
\uuuuuu item\uuuu
。此模板采用三个参数。故事结束了。您的工作是确定每个模板参数必须是什么。这里没有人能帮你弄清楚,尤其是根据问题中几乎没有的有用信息。您显示的代码无法满足stackoverflow.com中解释的a的要求,因此,没有人会知道“一些麻烦”是什么,更不用说如何解决它了;特别是矩阵multiplication@max66似乎有效。有什么问题吗?说来话长。我建议你遵守学校的规定。我只是让你注意一点:假设你有a*b
,其中a
是一个矩阵,b
是一个可以转换为矩阵的对象;在这两种情况下(operator*()
作为类方法或外部函数),操作都进行得很好;但是当b
是一个矩阵且a
是一个可以转换为矩阵的对象时,只有当操作符*()
是一个外部函数时,操作才能顺利进行。这种不对称性(在方法案例中)是一个糟糕的选择。
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
};