Template C++

Résolu
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 1 juin 2007 à 01:48
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 - 1 juin 2007 à 14:31
Je suis confronté à un petit problème. Quelqu'un saurait-il pourquoi le code suivant ne compile pas ? (j'utilise VC express, mais c'est pas important)

template <class U, class V>
class Test
{
public:
    Test(U _u, V _v);
};

template <class U, class V>
Test::Test(U _u, V _v)  <= Pas de pb ici
{};

template <class V>
Test::Test(int _u , V _v  < = Erreur: Ne compile pas. Voir ci-dessous pour l'erreur.
{};

template <>
Test::Test(int _u, int _v  <= Pas de pb ici
{};

int main()  { return 0; }

============================
.\main.cpp(18) : error C2244: 'Test::Test' : unable to match function definition to an existing declaration
        .\main.cpp(6) : see declaration of 'Test::Test'
        definition
        'Test::Test(int,V)'
        existing declarations
        'Test::Test(U,V)'
============================

La spécialisation totale du constructeur est donc comprise du compilo, mais pas la spécialisation partielle. Si qqun a une solution, je suis preneur.

merci.

5 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 juin 2007 à 14:25
Tu fais référence à une surcharge d'opérateur. Or c'est pas ce qui se passe la. En aucun cas, je veux un constructeur générique. Il faut un seul constructeur par classe, mais qui dépende des types utilisés pour créer la classe.

Enfin, la réponse au pb, c'est qu'on ne pas spécialiser juste un membre. Il faut spécialiser toute la classe.
3
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
1 juin 2007 à 12:06
Salut,

Pourquoi tu declares pas Test au tout debut aussi ?
Tu as 1 declaration et 3 definitions et la question que je me pose est :
pourquoi pas faire 3 declarations et 3 definitions ?

=
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 juin 2007 à 13:19
Faut comprendre que c'est un cas simplifié la. Une seule déclaration générique qui est spécialisé suivant le type.

Evidemment, je peux spécialiser la classe entière, il n'y aura pas de pb. Mais je veux gagner en ligne de code, car la plupart des fonctions utilisées sont communes, peu importe le type.

Qu'entends tu par 3 déclarations concrètement ?
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
1 juin 2007 à 14:01
RE

class Test
{
public:
    Test(U _u, V _v);
};
pourquoi tu mets pas aussi Test(int i, V _v); ?


=
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
1 juin 2007 à 14:31
RE

LOL

Tu poses la question pour y répondre seul ?
Ou je reve :p
0