Bonjour,
Petit problème de template (sous GCC4.4.5): comment spécialiser un constructeur de (re)copie pour pouvoir convertir une instanciation d'un type en un autre type ?
Je m'explique. Soit l'ECM suivant:
Comment écrire le constructeur de copie pour que le code suivant compile ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template <typename T> struct A { T t; }
J'ai tenté une spécialisation du constructeur de copie (qui au passage m'a obligé à déclarer aussi un constructeur explicite, je ne sais pas trop pourquoi...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main() { A<int> a_int; A<float> a_float ( a_int ); }
D'abord, le cas général:
Mais pour la spécialisation, je vois vraiment pas comment faire...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 template <typename T> struct A { T t; A(); A( const A& a ); }; template <typename T> A<T>::A() {} template <typename T> A<T>::A( const A<T>& a ) { t = a.t; }
Ceci :est refusé par gcc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template <> A<float>::A( const A<int>& a ) { t=(float)a.t; }
Bref, je patauge un peu...
Si vous aviez des idées ?
Partager