Есть контейнер, который хранит указатели на объекты:
template <typename Object>
class ObjectList : public IObject
{
public:
typedef typename std::vector<Object *> list;
typedef typename list::const_iterator const_iterator;
typedef typename list::iterator iterator;
const_iterator begin() const { return items_.begin(); }
const_iterator end() const { return items_.end(); }
iterator begin() { return items_.begin(); }
iterator end() { return items_.end(); }
protected:
list items_;
};
Есть некий базовый класс:
class BaseImportList : public ObjectList<BaseImport>
{
...
}
И есть потомок, который хранит в контейнере предка от BaseImport:
class MacImport : public BaseImport
{
...
}
class MacImportList : public BaseImportList
{
typedef typename std::vector<MacImport *> list;
list::const_iterator begin() const { return reinterpret_cast<const list &>(items_).begin(); }
list::const_iterator end() const { return reinterpret_cast<const list &>(items_).end(); }
}
Вопрос, как вытащить "std::vector" из ObjectList для приведения типов итератора чтобы больше никогда не зависеть от типа контейнера в базовом классе?