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/ObjectListIterator.h

    r9667 r10568  
    7474                @brief Constructor: Sets the element, whereon the ObjectListIterator points, to zero.
    7575            */
    76             inline ObjectListIterator() : IteratorBase<T, ObjectListIterator<T> >(NULL) {}
     76            inline ObjectListIterator() : IteratorBase<T, ObjectListIterator<T> >() {}
    7777
    7878            /**
Note: See TracChangeset for help on using the changeset viewer.