簡體   English   中英

C ++自定義編譯時檢查

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM