假设我有两个Matrice课程。一个矩阵是2乘2,另一个是3乘3,然后我将它们相乘。当然,我不能将两个没有相同尺寸的矩阵相乘。
我知道我可以构建运行时检查,但有没有办法使用c ++语言构建编译时检查?因此,如果我尝试编译一个程序,其中两个不同维度的定义矩阵相乘,则会产生编译时错误。
Matrix *matrix1 = new Matrix(2,2);
Matrix *matrix2 = new Matrix(3,3);
Matrix_Multiply(matrix1,matrix2); // compiler throws error on this line
同样在我们讨论这个主题时,是否有任何具有此功能的编程语言?
答案 0 :(得分: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);
也就是说,结果矩阵的大小由两个参数矩阵的大小推导出来。如果它们具有不匹配的尺寸,则不会找到合适的乘法运算符。
答案 1 :(得分:0)
您可以定义模板矩阵类,其中维度为模板参数。当您仅为此类型定义operator*()
时,编译器将阻止此类型与另一种类型的乘法。
template<int rows, int cols> class matrix {
public:
friend matrix operator*(const matrix &m1, const matrix &m2);
};