C++ 自定义编译时检查

标签 c++ compilation

假设我有两个矩阵类。一个矩阵是 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/

相关文章:

C++11 中非静态数据成员的类初始化

c++ - 复制省略可见的副作用

c++ - 单步编译时是否生成目标文件?

c - 给定堆栈和寄存器的状态,我们能否预测 printf 未定义行为的结果

iphone - 我可以在 iPhone 或 IPod 中编译 mysql、php(或者已经构建好的)吗?

compilation - Dart 中有编译器预处理器吗?

android - 尝试编译 AOSP 7.1.1 第 6 版时缺少 'libaudiopolicyservice_intermediates"?

c# - 屏幕上的绘图碰撞

c++ - VBA 中的 "Invalid use of New Keyword"使用用 C++ 编写的旧 com 对象

c++ - OpenCV 将 channel 设置为值 C++