template: conversion de type des instanciations via constructeur de copie
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:
Code:
1 2 3
| template <typename T>
struct A
{ T t; } |
Comment écrire le constructeur de copie pour que le code suivant compile ?
Code:
1 2 3 4 5
| int main()
{
A<int> a_int;
A<float> a_float ( a_int );
} |
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...).
D'abord, le cas général:
Code:
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; } |
Mais pour la spécialisation, je vois vraiment pas comment faire...
Ceci :
Code:
1 2 3
| template <>
A<float>::A( const A<int>& a )
{ t=(float)a.t; } |
est refusé par gcc...
Bref, je patauge un peu...:cry:
Si vous aviez des idées ?