[英]C++ custom compile-time check
假設我有兩個矩陣類。 一個矩陣是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);
即,結果矩陣的大小由兩個自變量矩陣的大小推導出。 如果它們的尺寸不匹配,將找不到合適的乘法運算符。
您可以使用尺寸作為模板參數定義模板矩陣類。 僅當為該類型定義一個operator*()
,編譯器將防止將此類型與另一個進行乘法運算。
template<int rows, int cols> class matrix {
public:
friend matrix operator*(const matrix &m1, const matrix &m2);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.