我想在模板類上聲明一個模板方法,它不適合我。 這是更好地使這裏給出的代碼解釋是: 我有這個類:聲明一個模板類的模板方法
matrix.h
template <class T,int a,int b>
class Matrix {
private:
int x;
int y;
public:
class IllegalOperation();
template<T,int c,int d>
Matrix<T,a,b> operator+(const Matrix<T,c,d> m);
//...
}
matrix.cpp
template<class T,int a,int b>
template<T,int c,int d>
Matrix<T,a,b> Matrix<T,a,b>::operator+(const Matrix<T,c,d> m){
if(a!=c || b!=d) throw IllegalOperation();
// add matrices and return the result
}
我想這個代碼,以任何2種類型的矩陣工作和Matrix,其中a,b,c和d可以不同。 例如,我想這個代碼編譯並返回一個錯誤(運行時間):
const Matrix<int, 3, 2> m1;
const Matrix<int, 7, 3> m2;
// init m1 and m2
m1+m2;
儘管此代碼應該編譯併成功運行:
const Matrix<int, 3, 2> m1;
const Matrix<int, 3, 2> m2;
// init m1 and m2
m1+m2;
然而,當,我試圖編譯上面的代碼,我得到這個錯誤:
no match for âoperator+ in m1+m2
你希望'operator +'能夠只添加相同size_的矩陣,但是通過使用'Matrix'作爲它的參數與自己矛盾,其中'c'和'd'可能不等於'a '和'b'分別。 –
ForceBru
除此之外,您還目前有錯誤,你應該知道https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file –
@ForceBru我不是與自己相矛盾,但我希望錯誤在運行時顯示,而不是在編譯時顯示。我想要編譯代碼,然後給我錯誤。 – Loay