Próbuję znaleźć ogólny sposób dostępu do zestawu kontenerów. Mam standardowy wektor i listę oprócz innej niestandardowej listy.Ogólny iterator
Lista niestandardowa definiuje iterator;
class Iterator: public std::iterator<std::forward_iterator_tag, T> {
// ...
}
Iterator begin() {
return (Iterator(root));
}
Iterator end() {
return (Iterator(NULL));
}
z odpowiednimi operatorami przeciążonymi.
Idealnie, chciałbym to zrobić;
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;
};
Ale oczywiście są to wszystkie iteratory różnych typów. Mogę jednak założyć, że wszystkie pojemniki są tego samego typu.
Czy istnieje elegancki sposób rozwiązania tego problemu?
Thomas Becker (autor drugiego linku powyżej) ma dłuższy artykuł, który jest doskonały: http://www.artima.com/cppsource/type_erasure.html – Adrian
@Adrian - ten artykuł był genialny: D dzięki za udostępnienie go ! – nevelis