Partial Template Member Function Specialition
-
Hallo zusammen
ich bin grad dabei eine kleine Matrix Klasse zu schreiben und bin auf folgendes Problem gestossen: Wie kann ich die beiden Funktionen "Det" in die Klasse "Matrix" verschieben ? Sowas wie Partial Template Specialization aber nur für eine Funktion ....
#include "defs.h" #include "functions.h" namespace math { template<int ORDER> class Matrix { private: REAL m_Fields[ORDER][ORDER]; public: Matrix(Matrix<ORDER+1>& a, unsigned int ai, unsigned int ak) { for(unsigned int i = 0, thisi = 0; i < ORDER+1; i++) { if(i != ai) { for(unsigned int k = 0, thisk = 0; k < ORDER+1; k++) { if(k != ak) { At(thisi,thisk) = a.At(i,k); thisk++; } } thisi++; } } } Matrix() { } REAL& At(unsigned int i, unsigned int k) { return m_Fields[i][k]; } void Identity() { for(unsigned irow = 0; irow < ORDER; irow++) { for(unsigned int icol = 0; icol < ORDER; icol++) { At(irow,icol) = (icol == irow) ? REAL(1.0) : REAL(0.0); } } } }; template<int ORDER> REAL Det(Matrix<ORDER>& m) { REAL d = REAL(0.0); for(unsigned int icol = 0; icol < ORDER; icol++) { Matrix<ORDER-1> sub(m, 0, icol); REAL pre = (icol % 2) == 0 ? REAL(1.0) : REAL(-1.0); d += pre * m.At(0,icol) * Det(sub); } return d; } template<> REAL Det(Matrix<1>& m) { return m.At(0,0); } }
Danke und Gruss Tobias
-
Hallo!
Verschieb die Funktion in ne eigene Klasse, die kannst Du dann spezialisieren.
MfG Jester
-
Hab ne Klasse MatrixBase geschrieben, dort die algemeine Determinant Funktion reinverschoben und dann in einer abgeleiteten Klasse Matrix spezialisiert.
Cheers Tobias