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 :
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();
};
.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
 
#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();
}
Exemple d'utilisation qui doit �tre possible :
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
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
5
 
In file included from main.cpp:15:0:
persistenceDiagram.hpp:10:28: error: expected 'class' before 'Container'
template < template< class > Container > class PersistenceDiagram{
                            ^
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...

Merci d'avance,
Je me tiens � votre disposition pour toute pr�cision/reformulation/explication n�cessaire.