C ++에서 "소유자 클래스"를 참조하는 방법은 무엇입니까?
문제
다음과 같이 보이는 코드가 있습니다.
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list::iterator
{
public:
iterator();
protected:
list* lstptr;
};
list<T>::iterator::iterator()
{
//???
}
나는 생성자를 만들고 싶다 list::iterator
만들다 iterator::lstptr
호출 된 목록을 가리 킵니다. 즉:
list xlst;
xlst::iterator xitr;
//xitr.lstptr = xlst
어떻게할까요?
또한 반복자-건설자를 올바르게 언급하거나 다음과 같은 일을해야합니다.
template<class T>
class list<T>::iterator
{
public:
list<T>::iterator();
protected:
list* lstptr;
};
해결책
목록을 반복자의 생성자에게 전달할 수 있습니다.
list xlst;
list::iterator xitr(xlst);
또는 반복 공장 기능을 만들 수 있습니다.
list xlst;
list::iterator xitr = xlst.create_iter();
공장 기능의 경우 create_iter()
함수는 사용할 수 있습니다 this
동봉 목록을 참조합니다.
다른 팁
포인터를 변경 (재판매) 할 필요가없고 Null 값이 필요하지 않으므로 대신 참조를 사용합니다. 또한 멤버 변수를 할당 할 때 이니셜 라이저 목록을 사용할 수 있습니다 (참조를 사용하는 경우).
template<class T>
class list::iterator
{
public:
iterator( list& parent ) : lstptr( parent ){}
protected:
list& lstptr;
};
그리고 앞에서 언급했듯이 : 목록 클래스 내부의 공장 메소드를 사용하여 유형 목록의 개체를 구성합니다 :: iterator.
제휴하지 않습니다 StackOverflow