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 :

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.*/
};
La difficulté :

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.