dynamische Template Variablen



  • hi Leute

    folgendes Problem:
    Meine Programmieraufgabe besteht darin, eine Matrix als generischen Datentyp zu schreiben, sprich:

    template <class T, int M, int N> class CMatrix
    

    Mein Problem ist, wenn ich die Operatoren schreibe, muss ich ja eine neue Instanz dieser Klasse zurückgeben, ich kann aber keine erzeugen, weil die Zeilen und Spaltenanzahl benötigt wird, und diese im Templateaufruf zur Kompilerzeit feststehen müssen.

    Eine Möglichkeit wäre, das Array, was der Matrix zu Grunde liegt dynamisch anzulegen, Ich weiß nur nicht, wie viel Wert der Professor auf die Parameter M und N legt. Gibt Es eine Möglichkeit diese witerhin zu nutzen, oder muss ich auf die dynamische Methode zurückgreifen?

    MfG
    Ifi



  • Wenn du die Templateargumente zur Compilezeit nicht weisst, hast du keine andere Möglichkeit, das über dynamischen Speicher zu verwalten. Du kannst intern beispielsweise std::vector nutzen.

    template <typename T>
    class Matrix
    {
        public:
            Matrix(unsigned int Rows, unsigned int Columns);
            T& At(unsigned int Y, unsigned int X);
    
        private:
            std::vector<std::vector<T> > myMat;
    };
    
    template <typename T>
    Matrix::Matrix(unsigned int Rows, unsigned int Columns)
    : myMat(Rows, std::vector<T>(Columns))
    {
    
    }
    
    template <typename T>
    T& At(unsigned int Y, unsigned int X)
    {
        return myMat[Y][X];
    }
    


  • Um es noch Kürzer zu formulieren:
    Templates werden zur Compilezeit ausgewertet, zur Laufzeit ist die Auflösung nicht mehr möglich.


Anmelden zum Antworten