Bonjour,

J'ai actuellement une interface A dont une méthode prend un vecteur de X et une autre interface B retournant un vecteur de X.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
class A
{
               virtual void foo(const std::vector<X> &) = 0;
}
 
class B
{
              virtual const std::vector<X> & foo(void) = 0;
}
Vous l'aurez compris, le but est de faire :
Mais j'aimerais faire quelque chose de plus générique pour permettre aux classes implémentant l'interface B d'utiliser d'autres conteneurs qu'un std::vector<X>.
J'aimerais donc avoir quelque chose du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
class A
{
               virtual void foo(constIterator<X>, constIterator<X>) = 0;
}
 
class B
{
              virtual std::pair<constIterator<X>, constIterator<X> > foo(void) = 0;
              // ou const IConteneur & foo(void) = 0; où IConteneur n'a que deux méthodes : begin() et end(). 
}
En effet, dans A, je dois juste parcourir le conteneur, et je me moque un peu de son type.
Pour faire cela, la STL utilise des templates (cf std::vector::vector() ).

Or, je ne suis pas sûr que les templates "virtuelles" existent .
Je me demandais donc si la STL n'avais pas une solution à ce niveau-là ou s'il n'existait pas un idiome ou un DP pour ceci.