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 :
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
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
et à l'instanciation, ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 template <class T> class truc { T machin; };
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 MPPRectangleGraph< truc<MPPRectangleGraphNode> > g;
Et qu'on l'instancie plus simplement :
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>
Or, dans mon cas, "LeTemplate", c'est mon paramètre qui est déjà template, à savoir "Node".
Code : Sélectionner tout - Visualiser dans une fenêtre à part MPPRectangleGraph< truc > g;
Pour le code des méthodes, je faisai ça :
Si j'utilise le "truc" d'Alexandrescu, comment je dois faire ? Visual(2003) hurle ...
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 je fais ça :
Comment je déclare mes méthodes ?
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>
Partager