Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用c+实现矩阵+;模板_C++_Templates_Matrix - Fatal编程技术网

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