Bonjour à tous,
voila mon code
Code :
- template <class T> class vector
- {
- T * data;
- int sz;
- public:
- vector(int n):sz(n) {data=new T[sz];}
- ~vector() {delete[] data;}
- T & operator[](int i){return data[i];}
- vector<T> & operator= (const vector<T> & );
- vector<T> (const vector<T> & );
- void affiche() {cout<<data<<endl;}
- T operator[](int i) const {return data[i];}
- int size() const {return sz;}
- };
- template <class T> vector<T> & vector<T>::operator =(const vector<T> & x)
- {
- delete[] data;
- sz=x.sz;
- data=new T[sz];
- for (int i=0; i<=sz-1; i++)
- {
- data[i]=x.data[i];
- }
- return *this;
- }
-
- template <class T> vector<T>::vector<T>(const vector<T> & x)
- {
-
- sz=x.sz;
- data=new T[sz];
- for (int i=0; i=sz-1; i++)
- {
- data[i]=x.data[i];
- }
- }
-
- vector<T*> & vector<T*>::operator =(const vector<T*> & x)
- {
- delete[] data;
- sz=x.sz;
- data=new (T*)[sz];
- for (int i=0; i<=sz-1; i++)
- {
- if (*(data[i])==0)
- {*(data[i])=*(x.data[i]);}
- else data[i]=x.data[i];
- }
- return *this;
- }
- vector<T*>::vector<T*>(const vector<T*> & x)
- {
-
- sz=x.sz;
- data=new (T*)[sz];
- for (int i=0; i=sz-1; i++)
- {
- if (*(data[i])==0)
- {*(data[i])=*(x.data[i]);}
- else data[i]=x.data[i];
- }
- }
|
Alors je vous explique, je crée une classe vector, munit d'un tableau dynamique, et je cherche a specialiser mon operateur d'affectation ( = ) et mon operateur de copie de la classe dans le cas ou le tableau est lui même un tableau de pointeur. En effet il faudra alors faire une deep copie, car si non au lieu de copier les valeurs pointés par les cases du tableau, je copierai les adresses, ce qui n'a aucun interet.
Le probleme est que, je sais proceder a une specialisation de fonction de classe, pas de probleme ou a une specialisation partielle de classe, pas de probleme, mais comment faire pour proceder a une specialisation partielle de fonction de classe, quelle est la syntaxe.
Je voudrait toujours garder le type T indéfini dans la nouvelle definition de l'operateur= et affectation mais les specialiser en type T* pour pouvoir dans ce cas la effectuer la deep copie.
Il s'agit donc de declarer de maniere adequate les deux dernieres fonctions que vous voyez.
Merci d'avance a qui pourra m'indiquer la syntaxe correcte.
Message édité par MVL2 le 13-11-2007 à 11:50:31