Variable in Templateparametern

kodak

Mitglied
hi Leute

folgendes Problem:
Meine Programmieraufgabe besteht darin, eine Matrix als generischen Datentyp zu schreiben, sprich:
Code:
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
 
hi Leute

folgendes Problem:
Meine Programmieraufgabe besteht darin, eine Matrix als generischen Datentyp zu schreiben, sprich:
Code:
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
du kennst doch spalten und zeilen bereits zur kompilier Zeit, sind ja M und N, die übergibst du auch so deinem Rückgabenwert.
 
Stimmt ja, ich hatte die beiden Größenparameter über eine Funktion abgefragt, wenn ich drekt die Parameter einsetze funktioniert es. Danke.

Hab zwar noch eine weitere Frage, aber die gehört in ein neues Thema.
 
Hm, ein Problem habe ich noch:

Wenn ich Untermatritzen erstellen will, brauche ich eine Matrix von der Größe M-1, N-1. Da macht aber der Kompiler nicht mit. Warum nicht, die Größe steht doch fest?
 
Das Problem ist ja dass das Template mit M-1,N-1 dann ja selber eine MEthode hat die ein Wert vom Typ M-2,N-2 wider gibt und so weiter. Das würde ja unendlich viele Template Typen bedeuten, was man versuchen könnt, wär Spezifische Template mit N==1 und M ==1 zu erstellen, um diesen "selbst" aufruf zu verhindern, aber ob das funktioniert weiß ich nicht.
 
Nja klar geht das ;)
C++:
template<int l> 
struct faculty 
{ enum { result = l * faculty<l - 1>::result }; } ;

template<> 
struct faculty<1> 
{ enum { result = 1 } ; } ;

#include <iostream>

int main()
{ std::cout << "10! = " << faculty<10>::result << std::endl; }
;) ...
 
Super, danke für die Anwort:

Code:
template <class T, int M, int N> class CMatrix
{ ... };
template <class T> class CMatrix<T, 0, 0>
{};
funktioniert tadellos :)
 
Zurück