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


Anmelden zum Antworten