Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 8, 2015, 10:02:46 PM (9 years ago)
Author:
landauf
Message:

Enforce type-safety of ObjectListIterator.
Previously it was possible to convert any ObjectListBaseElement* to an ObjectListIterator<T> with any T. This was because ObjectListIterator can be created from IteratorBase which in turn had a public constructor for ObjectListBaseElement*.
Now this constructor in IteratorBase is protected. As a replacement, there are two new public constructors for ObjectListElement<T>* either for the same class T or another class O that must be a derivative of T.
In short, this means that this is ok:

ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); ok, same class
ObjectList<BaseObject>::iterator it = ObjectList<WorldEntity>::begin();
ok, WorldEntity is derivative of BaseObject

But this will now fail to compile:

ObjectList<BaseObject>::iterator it = ObjectList<Listable>::begin(); not ok, Listable is not a derivative ob BaseObject

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core7/src/libraries/core/object/Iterator.h

    r9667 r10568  
    7676                @brief Constructor: Sets the element, whereon the iterator points, to zero.
    7777            */
    78             inline Iterator() : IteratorBase<T, Iterator<T> >(NULL) {}
     78            inline Iterator() : IteratorBase<T, Iterator<T> >() {}
    7979
    8080            /**
     
    8888                @param other The other Iterator
    8989            */
    90             inline Iterator(const Iterator<T>& other) : IteratorBase<T, Iterator<T> >(other) {}
     90            inline Iterator(const IteratorBase<T, Iterator<T> >& other) : IteratorBase<T, Iterator<T> >(other) {}
    9191
    9292            /**
Note: See TracChangeset for help on using the changeset viewer.