Bonjour,
Je débute en C++. Je veux faire une classe PersistenceDiagram qui :
1) contient un ensemble de points (de type Diagram_point, cf typedef) dans un container de la stl
2) dispose d'un certain nombre de méthodes, disons une méthode pour ajouter des points + un iterator
Seulement je veux qu'on puisse choisir quel container de la stl on utilise (list, vector, etc..) pour stocker les points dans le PersistenceDiagram à chaque fois qu'on en crée un. Donc PersistenceDiagram doit être un template, le paramètre de ce template est un container de la stl, c'est à dire un autre template. J'ai écrit ça :
Header :
.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #pragma once #include <utility> #include <list> typedef typename std::pair<double,double> Diagram_point; template < template< class > Container > class PersistenceDiagram{ private: Container< Diagram_point > points; public: template < template<class> Container > PersistenceDiagram(); void add_point(Diagram_point p); template < template<class> Container > typename Container< Diagram_point >::iterator begin(); template < template<class> Container > typename Container< Diagram_point >::iterator end(); };
Exemple d'utilisation qui doit être possible :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "persistenceDiagram.hpp" template < template<class> Container > PersistenceDiagram::PersistenceDiagram(){ points = Container< Diagram_point >(); } void PersistenceDiagram::add_point(Diagram_point p){ points.push_back(p); } template < template<class> Container > typename Container< Diagram_point >::iterator PersistenceDiagram::begin(){ return points.cbegin(); } template < template<class> Container > typename Container< Diagram_point >::iterator PersistenceDiagram::end(){ return points.cend(); }
Pour l'instant g++ me balance plusieurs pages d'erreurs, je pense qu'il est sage de se limiter à la première pour commencer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PersistenceDiagram<std::list> my_persistence_diagram(); PersistenceDiagram<std::vector> my_persistence_diagram2(); my_persistence_diagram.add_point(my_point); // my_point est de type Diagram_point
Je ne vois vraiment pas pourquoi il me dit ça, j'ai déjà indiqué le type du paramètre du template : il s'agit d'un autre template, ce dernier prend en paramètre une classe. Ca n'a pas de sens de me demander de mettre un deuxième type pour Container...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 In file included from main.cpp:15:0: persistenceDiagram.hpp:10:28: error: expected 'class' before 'Container' template < template< class > Container > class PersistenceDiagram{ ^
Merci d'avance,
Je me tiens à votre disposition pour toute précision/reformulation/explication nécessaire.
Partager