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.
Vous l'aurez compris, le but est de faire :
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; }
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>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part a.foo(b.foo() );
J'aimerais donc avoir quelque chose du genre :
En effet, dans A, je dois juste parcourir le conteneur, et je me moque un peu de son type.
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(). }
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.
Partager