Bonjour, j'essaie d'écrire une classe Matrix, et, je n'arrive pas à la spécialiser comme je veux. Voici à quoi ressemblerait ma classe Matrix :
La difficulté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template<typename T, unsigned int Ligns, unsigned int Columns> class Matrix { private : T*Obj; public : /*DesChoses.*/ };
J'aimerais que quand sizeof(T)*Ligns*Columns < 8*1000*100 (100ko), que Obj soit un tableau statique.
Donc déclaré ainsi : T Obj[Ligns*Columns].
Mais que quand sizeof(T)*Ligns*Columns > 8*1000*100 (100ko) j'aimerais alloué dynamiquement Obj (pour éviter de trop remplir la pile).
Donc, déclaré ainsi : T*Obj. En allouant avec new dans le constructeur.
Bien sur, l'une des solutions aurait été de spécialiser selon un booléen que l'utilisateur choisirait en true ou false :
Par Exemple :
Matrix<float, 4,4,true>//On alloue sur la pile.
Matrix<double, 1000,100,false>//On alloue sur le tas
Sauf que je veux que l'utilisateur ne rentre pas le true/false tout en lui laissant l'option de le faire (si il veut vraiment alloué un mégaoctet sur le pile, il peut l'obliger).
Il serait donc utilisé ainsi :
Matrix<float, 4,4>//On alloue sur la pile.
Matrix<double, 1000,100>//On alloue sur le tas.
Matrix<float, 4,4,false>//On alloue sur le tas.
Matrix<double, 1000,100,true>//On alloue sur la pile.
Comment donc spécialiser ma classe ? Ou mettre mes templates par défauts ?
Pensez vous que c'est une bonne idée de proposer pile/tas ? La limite de 100ko par défaut est-elle bonne ?
Merci.
Partager