template<typename T>
class Iterator {
public:
virtual T ¤t() = 0;
virtual void next() = 0;
};
template<typename T>
class MyCollection {
public:
Iterator<T> GetIterator() {
}
};
template<typename T>
class MyCollectionIterator : public Iterator<T> {
private:
MyCollection<T> mc;
public:
MyCollectionIterator(const MyCollectionIterator<T> &c) : mc(c) {}
T &currnt() override {}
void next() override {}
};
int main() {
MyCollection<int> myCollection;
Iterator<int> iter = myCollection.GetIterator();
for(iter.begin(); !=iter.end(); iter++) {
cout << iter.current();
}
}