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