gpt4 book ai didi

c++ - 在 C++ 中使用模板参数进行矩阵乘法

转载 作者:行者123 更新时间:2023-11-30 03:51:14 26 4
gpt4 key购买 nike

我有一个自定义的Matrix类并想重载运算符 *做矩阵乘法:

template< int R, int C> 
class Matrix{
int *_mat;
int _size;
public:
Matrix(){ _size = R*C; _mat = new int[_size]{0}; }
~Matrix(){ delete []_mat; }
Matrix &operator=(const Matrix & m){/*...*/}
//...
template< int D2, int D1 > using matrix_t = int[D2][D1];
template<int R2, int C2>
Matrix<R,C2> operator*(const matrix_t<R2,C2> &mat)
{
Matrix<R,C2> result;
for(int r = 0; r < R; r++)
{
for(int c = 0; c < C2; c++)
{
for( int i; i < C; i++ ){
/*do multiplication...
result._mat[r*C2+c] = ...
*/
}
}
}
return result;
}
//...
};

那么问题就来了Matrix<R,C2> result . result成为类的外部对象。所以我无法使用 result._mat[r*C2+c] 访问它的私有(private)成员.

在此类中定义我的矩阵乘法函数的解决方案是什么(不更改访问权限)?

最佳答案

您可以指定一个运算符,以便您可以在外部设置矩阵的值。请注意,您将无法使用 operator [] - 因为您只能将其与一个参数一起使用(引用 C++ [] array operator with multiple arguments? )

   int& operator() (int row, int col) { 
// todo: check array bounds
return _mat[C*row+col];
}

用法:

 result(r,c) = ...

关于c++ - 在 C++ 中使用模板参数进行矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com