Estoy tratando de encontrar una forma genérica de acceder a un conjunto de contenedores. Tengo un vector estándar y una lista además de otra lista personalizada.Iterador genérico
La lista personalizada define un iterador;
class Iterator: public std::iterator<std::forward_iterator_tag, T> {
// ...
}
Iterator begin() {
return (Iterator(root));
}
Iterator end() {
return (Iterator(NULL));
}
con los operadores apropiados sobrecargados.
Idealmente, me gustaría hacer esto;
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;
};
Pero obviamente estos son todos los iteradores de diferentes tipos. Sin embargo, puedo suponer que todos los contenedores son del mismo tipo.
¿Hay una forma elegante de resolver este problema?
Thomas Becker (autor del segundo enlace de arriba) tiene un artículo más extenso que es excelente: http://www.artima.com/cppsource/type_erasure.html – Adrian
@Adrian - ese artículo fue genial: D gracias por compartirlo ! – nevelis