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 :

Template, template, encore des template


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 103
    Points : 68
    Points
    68
    Par défaut Template, template, encore des template
    Salut à tous,

    Je me suis plongé dans la lecture du (très bon) bouquin d'Alexandrescu, et j'essaie d'implémenter une classe template dont l'un des paramètres est une politique.
    Bon, je suis arrivé à un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template < class ObjectNeighborhoodPolicy,
    		   class NodesContainer = boost::vecS,
    		   class EdgesContainer = boost::vecS,
    		   class Node = MPPRectangleGraphNode,
    		   class Edges = Weight
    		 > class MPPRectangleGraph  : public BGL_Graph<NodesContainer,EdgesContainer,boost::undirectedS,Node,Edges>, public ObjectNeighborhoodPolicy
    Après, ce ne sont encore que des tests. J'ai donc ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <class T> class truc
    {
    	T machin;
    };
    et à l'instanciation, ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MPPRectangleGraph< truc<MPPRectangleGraphNode> > g;
    Alexandrescu donne une méthode pour éviter la déclaration du paramètre template de la politique à l'instanciation (pas que pour ça ...). C'est à dire qu'on a ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template < template <class AreNeigh> class ObjectNeighborhoodPolicy,
    		   class NodesContainer = boost::vecS,
    		   class EdgesContainer = boost::vecS,
    		   class Node = MPPRectangleGraphNode,
    		   class Edges = Weight
    		 > class MPPRectangleGraph  : public BGL_Graph<NodesContainer,EdgesContainer,boost::undirectedS,Node,Edges>, public ObjectNeighborhoodPolicy<LeTemplate>
    Et qu'on l'instancie plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MPPRectangleGraph< truc > g;
    Or, dans mon cas, "LeTemplate", c'est mon paramètre qui est déjà template, à savoir "Node".
    Pour le code des méthodes, je faisai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template < class ObjectNeighborhoodPolicy ,class NodesContainer,
    		   class EdgesContainer,
    		   class Node,
    		   class Edges> void MPPRectangleGraph<ObjectNeighborhoodPolicy,NodesContainer,EdgesContainer,Node,Edges>::InitDisplayXML( const std::string &XMLfilename )
    		   {//...}
    Si j'utilise le "truc" d'Alexandrescu, comment je dois faire ? Visual(2003) hurle ...

    Si je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template < template <class AN> class ObjectNeighborhoodPolicy,
    		   class NodesContainer = boost::vecS,
    		   class EdgesContainer = boost::vecS,
    		   class Node = MPPRectangleGraphNode,
    		   class Edges = Weight
    		 > class MPPRectangleGraph  : public BGL_Graph<NodesContainer,EdgesContainer,boost::undirectedS,Node,Edges>, public ObjectNeighborhoodPolicy<NodesContainer>
    Comment je déclare mes méthodes ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 103
    Points : 68
    Points
    68
    Par défaut
    Bon, c'était pas si tordu que ça, il suffisait de reprendre la déclaration des aramètres template de la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template < template <class AR> class ObjectNeighborhoodPolicy ,class NodesContainer,
    		   class EdgesContainer,
    		   class Node,
    		   class Edges> void MPPRectangleGraph<ObjectNeighborhoodPolicy,NodesContainer,EdgesContainer,Node,Edges>::InitDisplayXML( const std::string &XMLfilename )
    		   {// ...}

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

Discussions similaires

  1. [Template] spécialisation partielle des template
    Par vikki dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2008, 16h29
  2. Utilisation des templates
    Par vanitom dans le forum MFC
    Réponses: 21
    Dernier message: 01/08/2007, 11h07
  3. [XSL]portée des templates??
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 23/02/2006, 10h53
  4. [XSL] utilisation des templates
    Par KibitO dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 16/12/2005, 15h54
  5. Utilisation des templates
    Par mikky dans le forum C++
    Réponses: 1
    Dernier message: 14/09/2005, 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