Have a quick question about what would be the best way to implement iterators in the following:

Say I have a templated base class 'List' and two subclasses "ListImpl1" and "ListImpl2". The basic requirement of the base class is to be iterable i.e. I can do:

```
for(List<T>::iterator it = list->begin(); it != list->end(); it++){
   ...
}

```

I also want to allow iterator addition e.g.:

```
for(List<T>::iterator it = list->begin()+5; it != list->end(); it++){
   ...
}

```

So the problem is that the implementation of the iterator for ListImpl1 will be different to that for ListImpl2. I got around this by using a wrapper ListIterator containing a pointer to a ListIteratorImpl with subclasses ListIteratorImpl2 and ListIteratorImpl2, but it's all getting pretty messy, especially when you need to implement operator+ in the ListIterator. 

Any thoughts on a better design to get around these issues?