イテレータのようなものを作っててわからなくなりました
template < class T >
class renketu {
struct list {
list *prev;
list *next;
T n;
}
list *begin;
public:
class iterator {
public:
iterator& operator++();
・・・・
private:
list *listPtr;
}


renketu(){
begin = new list;
}
iterator beginIterator(){
return ???;
}
}

のような感じにするとiteratorでprivateにしてるlistPtrに対してアクセスすることができずlist *beginを持つiteratorを返すことができません
だからと言ってiteratorのpublicに書き換えるための関数を用意するのもスマートではありません
どうにかして例外的にprivateにアクセスさせるなどの方法はないでしょうか