Itérateurs " génériques "
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:
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:
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 :aie:.
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.