Предположим, я хочу реализовать на C ++ структуру данных для хранения ориентированных графов. Дуги будут храниться в узлах благодаря контейнерам STL. Я бы хотел, чтобы пользователи могли выполнять итерацию по дугам узла способом, подобным STL.
У меня проблема в том, что я не хочу раскрывать в классе Node (который на самом деле будет абстрактным базовым классом), какой контейнер STL я буду использовать в конкретном классе. Поэтому я не хочу, чтобы мои методы возвращали std :: list :: iterator или std :: vector :: iterator ...
Я пробовал это:
class Arc;
typedef std::iterator<std::random_access_iterator_tag, Arc*> ArcIterator; // Wrong!
class Node {
public:
ArcIterator incomingArcsBegin() const {
return _incomingArcs.begin();
}
private:
std::vector<Arc*> _incomingArcs;
};
Но это неверно, потому что vector :: const_iterator нельзя использовать для создания ArcIterator. Так что же может быть этим ArcIterator?
Я нашел этот документ о пользовательских итераторах для STL, но это не помогло. Я, должно быть, сегодня полноват ...;)
boost:graph. Если вы действительно пишете адаптеры для графовых структур, подумайте об их использовании. - person Alexandre C.   schedule 03.02.2011