0

假设我有两个矩阵类。一个矩阵是 2 x 2,另一个是 3 x 3,然后我将它们相乘。当然,我不能将两个维度不同的矩阵相乘。

我知道我可以构建运行时检查,但是有没有办法使用 c++ 语言构建编译时检查?因此,如果我尝试编译一个程序,其中两个不同维度的定义矩阵相乘,它将通过编译时错误。

Matrix *matrix1 = new Matrix(2,2);
Matrix *matrix2 = new Matrix(3,3);

Matrix_Multiply(matrix1,matrix2);  // compiler throws error on this line 

另外,当我们讨论这个主题时,是否有任何编程语言具有此功能?

4

2 回答 2

1

答案取决于您的矩阵如何获得维度:如果维度是在运行时确定的,则没有编译时检查。但是,如果矩阵是编译时维度的,我认为您自然会最终进行编译时检查:

template <typename T, int Width, int Height>
class Matrix;

template <typename T, int M, int N, int O>
Matrix<T, M, O> operator* (Matrix<T, M, N> const& lhs, Matrix<T, N, O> const& rhs);

也就是说,结果矩阵的大小由两个参数矩阵的大小推导出来。如果它们的维度不匹配,将找不到合适的乘法运算符。

于 2012-12-02T23:13:11.970 回答
0

您可以使用维度作为模板参数定义模板矩阵类。当你operator*()只为这个类型定义一个时,编译器会阻止这个类型与另一个相乘。

template<int rows, int cols> class matrix {
public:
    friend matrix operator*(const matrix &m1, const matrix &m2);
};
于 2012-12-02T23:14:58.723 回答