J'essaie de trouver une façon générique d'accéder à un ensemble de conteneurs. J'ai un vecteur standard et une liste en plus d'une autre liste personnalisée.Itérateur générique
La liste personnalisée définit un itérateur;
class Iterator: public std::iterator<std::forward_iterator_tag, T> {
// ...
}
Iterator begin() {
return (Iterator(root));
}
Iterator end() {
return (Iterator(NULL));
}
avec les opérateurs appropriés surchargés.
Idéalement, j'aimerais le faire;
class Foo {
public:
Foo() {
std::list<int> x;
std::vector<int> y;
custom_list<int> z;
iter = x.begin(); // OR
iter = y.begin(); // OR
iter = z.begin();
// ...
};
private:
std::iterator<int> iter;
};
Mais évidemment, il s'agit tous d'itérateurs de types différents. Je peux supposer que tous les conteneurs sont du même type cependant.
Existe-t-il une manière élégante de résoudre ce problème?
Thomas Becker (auteur du deuxième lien ci-dessus) a un article plus long qui est excellent: http://www.artima.com/cppsource/type_erasure.html – Adrian
@Adrian - cet article était génial: D merci de le partager ! – nevelis