Вот довольно обычная инкапсуляция контейнера STL, которая позволяет пользователю Cfoo выполнять итерацию контейнера, не допуская изменений во внутренностях.
#include <vector>
class Cfoo
{
public:
class Cbar
{
/* contents of Cbar */
};
typedef std::vector<Cbar> TbarVector;
typedef TbarVector::const_iterator const_iterator;
public:
const_iterator begin() const { return( barVector_.begin() ); }
const_iterator end() const { return( barVector_.end() ); }
private:
TbarVector barVector_;
};
Пока все хорошо.Мы можем перебрать контейнер так:
Cfoo myFoo;
for (Cfoo::const_iterator it = myFoo.begin(); it != myFoo.end(); ++it)
{
it->DoSomething();
}
Теперь я хочу заменить std :: vector на вложенный std :: vector:
public:
typedef std::vector<Cbar> TbarVectorInner;
typedef std::vector<TbarVectorInner> TbarVectorOuter;
private:
TbarVectorOuter barContainer_;
Но я хочу бытьвозможность перебирать все экземпляры Cbar таким же образом, как и раньше, предоставляя const_iterator, методы begin () const и end () const.
Мне не ясно, как это сделать, хотя я подозреваю, что это требует написания собственного итератора.Есть мысли?