Template container en C++
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:
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:
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:
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:
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.