ObjectList is a wrapper to ObjectListBase. ObjectListBase contains all objects of a given class, but threats the objects as OrxonoxClasses. ObjectList in contrary is a template and knows about the correct class. By definition theres only one ObjectList per class. This is easy to proof because ObjectList<T> just redirects to ClassIdentifier<T>::objects_ (which is an ObjectListBase).
So, in other words, ObjectList<T> is just a shortcut for:
ObjectList provides the same functions as ObjectListBase but doesn't return an Export struct but a class-specific list element pointer which can not only be used by Iterator but also by ObjectListIterator. This is important because ObjectListIterator is much more performant than Iterator.
- begin(): Returns a pointer to the first element in the list
- end(): Returns a pointer to the list-element after the last element in the list
- rbegin(): Returns a pointer to the last element in the list
- rend(): Returns a pointer to the list-element before the first element in the list
The illustration shows how the ObjectList<T> uses ClassIdentifier<T> to get the ObjectListBase. Because ObjectList<T> knows about the right class (T) it casts the list element to the right type and gets the object pointer without dynamic_cast.