Вы не хотите в общем «поддерживать любой тип итератора».
Вы хотите удовлетворить требования контейнера STL, чтобы предоставить итератор, который пользователи могут поддерживать в общем.Сделайте итератор, затем предоставьте итератор typedef для вашего контейнера:
class Entity_Iterator {
public:
Entity_Iterator operator++() { /* et cetera */ }
Entity& operator*() const { /* et cetera */ }
private:
Entity* entity_ptr_;
// et cetera
}
class Entity_Container {
public:
typedef Entity_Iterator iterator;
iterator begin() const { /* et cetera */ }
iterator end() const { /* et cetera */ }
private:
Entity* head_;
// et cetera
}
Теперь пользователь может следовать соглашению о контейнере STL для использования вашего контейнера, и вы сможете применять алгоритмы STL к своему контейнеру какскважина:
Entity_Container x;
Entity_Container::iterator i = x.begin();
i->GetName();
Редактировать добавить ссылку:
http://www.sgi.com/tech/stl/Container.html
Редактировать
Я пытаюсь найти ссылку на полный шаблон заглушки кода C ++ для реализации контейнера STL, который, как я помню, однажды видел, но для меня это очень сложно Шаблон STL .
Редактировать
Сделайте это так, и вы сможете написать свой контейнер в виде древовидной структурыкоторые могут содержать гетерогенные типы, унаследованные от Entity с помощью виртуальных методов. Похоже, вы пытаетесь это сделать?
Или, возможно, нет?