Приведение типов итераторов для контейнера с базовым типом
От: drVanо Россия https://vmpsoft.com
Дата: 12.01.24 08:59
Оценка:
Есть контейнер, который хранит указатели на объекты:
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 для приведения типов итератора чтобы больше никогда не зависеть от типа контейнера в базовом классе?
Отредактировано 12.01.2024 9:00 drVanо . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.