Ich versuche eine generische Art des Zugriffs auf eine Reihe von Containern zu finden. Ich habe einen Standardvektor und eine Liste zusätzlich zu einer anderen benutzerdefinierten Liste.Generic iterator
Die benutzerdefinierte Liste definiert einen Iterator;
class Iterator: public std::iterator<std::forward_iterator_tag, T> {
// ...
}
Iterator begin() {
return (Iterator(root));
}
Iterator end() {
return (Iterator(NULL));
}
mit den entsprechenden Operatoren überlastet.
Idealerweise möchte ich dies tun;
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;
};
Aber natürlich sind diese alle Iteratoren verschiedenen Typen. Ich kann jedoch davon ausgehen, dass alle Container vom selben Typ sind.
Gibt es eine elegante Möglichkeit, dieses Problem zu lösen?
Thomas Becker (Autor des zweiten Links oben) hat einen längeren Artikel, der hervorragend ist: http://www.artima.com/cppsource/type_erasure.html – Adrian
@Adrian - dieser Artikel war brillant: D danke für den Austausch ! – nevelis