假设我有两个矩阵类。一个矩阵是 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
另外,当我们讨论这个话题时,是否有任何编程语言具有此功能?
最佳答案
答案取决于您的矩阵如何获取维度:如果维度是在运行时确定的,则没有编译时检查。但是,如果矩阵是编译时维度的,我认为您自然会最终进行编译时检查:
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);
也就是说,结果矩阵的大小是由两个参数矩阵的大小推导出来的。如果它们的维度不匹配,将找不到合适的乘法运算符。
关于C++ 自定义编译时检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674966/