IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

intantiation de classe template


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Points : 40
    Points
    40
    Par défaut intantiation de classe template
    Bonjour,

    Je comprends que si la définition d'une classe template est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <class T> 
    class Foo 
    { 
      Foo() ....
    }
    Je peux l'instantier de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template class Foo<double>;
    Comment faire une instantiation si le constructeur de la classe
    template dépend d'un autre template comme dans le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <class T> 
    class Foo 
    {
     template <class P> Foo( ... ) ....
    }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Dans ton dernier code, tu crées un ensemble de constructeur (un pour chaque P).

    L'instanciation reste la même.

    Pourquoi veux-tu instancier explicitement ta classe?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Points : 40
    Points
    40
    Par défaut
    merci pour cette réponse.

    Si je mets ce morceau de code dans foo.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <class T> 
    class Foo 
    {
     template <class P> Foo( P p, ... ) ....
    }
    et les définitions dans foo.cpp ainsi que l'instantiation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template class Foo<typeT>;
    et si dans un main.cpp, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Foo<typeT> foo(typeP(...), ...)
    J'ai le message d'erreur suivant:
    undefined reference to 'Foo<typeT>::Foo<typeP>(typeP, ...)


    Je tente de swiguer un code qui contient des objets construits de cette manière.

  4. #4
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Citation Envoyé par debutant100 Voir le message
    J'ai le message d'erreur suivant:
    undefined reference to 'Foo<typeT>::Foo<typeP>(typeP, ...)
    La réponse est dans la faq : Pourquoi mes templates ne sont-ils pas reconnus à l'édition des liens ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par debutant100 Voir le message
    et les définitions dans foo.cpp ainsi que l'instantiation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template class Foo<typeT>;
    C'est une instanciation ça ?
    Je n'ai jamais vu un code qui y ressemble. A la limite pour une forward declaration.
    Une instanciation c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Foo<T> myFooT;
    Foo<T> myFooT(P1, ...);
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Points : 40
    Points
    40
    Par défaut
    Merci Arzar.
    Ca marche.


    Pour le terme "instantiation" .... ok .... c'est pas terrible ...



    C'est pas le sujet mais si quelqu'un sait "swiguer" cette classe
    avec le constructeur template vers python je suis preneur ...

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    SWIG n'aime pas trop les templates.

    Quel est ton code SWIG ?
    Quelle est l'erreur que tu as ?
    Parce que sinon il n'y a rien de difficile, nombreux sont les exemples sur internet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    %include <std_vector.i>
    %template(VectorInt) std::vector<int>;
    Enfin avant de passer à SWIG, il faut que ça compile.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problèmes de fonctions membres de classe templates, gcc3.3.6
    Par yves.dessertine dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 17/10/2005, 21h36
  2. Trouver le Type d'une classe template dynamiquement ?
    Par Serge Iovleff dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2005, 16h48
  3. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56
  4. Class template hérité
    Par Azharis dans le forum Langage
    Réponses: 4
    Dernier message: 24/06/2005, 22h03
  5. Réponses: 6
    Dernier message: 06/10/2004, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo