Template C++ [Résolu]

Signaler
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007
-
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

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

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 ?

=
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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 ?
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

RE

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


=
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

RE

LOL

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