다음을 통해 공유


CTypedPtrList 클래스

클래스 CPtrList의 개체에 대한 형식 안전 "래퍼"를 제공합니다.

구문

template<class BASE_CLASS, class TYPE>
class CTypedPtrList : public BASE_CLASS

매개 변수

BASE_CLASS
형식화된 포인터 목록 클래스의 기본 클래스입니다. 는 포인터 목록 클래스( CObList 또는 CPtrList)여야 합니다.

TYPE
기본 클래스 목록에 저장된 요소의 형식입니다.

멤버

공용 메서드

이름 설명
CTypedPtrList::AddHead 목록의 머리글에 요소(또는 다른 목록의 모든 요소)를 추가합니다(새 헤드를 만듭니다).
CTypedPtrList::AddTail 요소(또는 다른 목록의 모든 요소)를 목록의 꼬리에 추가합니다(새 꼬리를 만듭니다).
CTypedPtrList::GetAt 지정된 위치에 있는 요소를 가져옵니다.
CTypedPtrList::GetHead 목록의 헤드 요소를 반환합니다(비워 둘 수 없음).
CTypedPtrList::GetNext 반복할 다음 요소를 가져옵니다.
CTypedPtrList::GetPrev 반복할 이전 요소를 가져옵니다.
CTypedPtrList::GetTail 목록의 tail 요소를 반환합니다(비워 둘 수 없음).
CTypedPtrList::RemoveHead 목록의 머리에서 요소를 제거합니다.
CTypedPtrList::RemoveTail 목록의 꼬리에서 요소를 제거합니다.
CTypedPtrList::SetAt 지정된 위치에 요소를 설정합니다.

설명

C++ 형식 검사 기능을 사용하는 대신 CObListCPtrList사용하면 CTypedPtrList 일치하지 않는 포인터 형식으로 인한 오류를 제거할 수 있습니다.

또한 래퍼는 CTypedPtrList 사용 CObList 하거나 CPtrList사용하는 경우 필요한 캐스팅의 대부분을 수행합니다.

모든 CTypedPtrList 함수가 인라인이므로 이 템플릿을 사용하면 코드의 크기나 속도에 큰 영향을 주지 않습니다.

파생된 CObList 목록은 serialize할 수 있지만 파생된 CPtrList 목록은 serialize할 수 없습니다.

CTypedPtrList 개체를 삭제하거나 해당 요소를 제거할 경우 참조하는 엔터티가 아니라 포인터만 제거됩니다.

사용에 CTypedPtrList대한 자세한 내용은 컬렉션템플릿 기반 클래스 문서를 참조하세요.

예시

이 예제에서는 인스턴스 CTypedPtrList를 만들고, 하나의 개체를 추가하고, 목록을 디스크에 직렬화한 다음, 개체를 삭제합니다.

typedef CTypedPtrList<CObList, CMyObject*>  CMyList;
CMyList ml;
CMyObject* pMyObject = new CMyObject();
ml.AddTail(pMyObject);

CFileException e;
CFile myFile;
myFile.Open(_T("CTypedPtrList_File.txt"),
   CFile::modeCreate | CFile::modeWrite, &e);
CArchive ar(&myFile, CArchive::store);
ml.Serialize(ar);

ar.Close();
myFile.Close();

while (!ml.IsEmpty())
{
   delete ml.GetHead();
   ml.RemoveHead();
}

 

class CMyObject : public CObject
{
public:
   int i;
   void Serialize(CArchive& ar);
   CMyObject() { i = 9876; }
protected:
   DECLARE_SERIAL(CMyObject)
};

IMPLEMENT_SERIAL(CMyObject, CObject, 0)

void CMyObject::Serialize(CArchive& ar)
{
   CObject::Serialize(ar);
   if (ar.IsStoring())
      ar << i;
   else
      ar >> i;
}

상속 계층 구조

BASE_CLASS

_CTypedPtrList

CTypedPtrList

요구 사항

헤더: afxtempl.h

CTypedPtrList::AddHead

이 멤버 함수는 ::AddHead를 호출BASE_CLASS합니다.

POSITION AddHead(TYPE newElement);
void AddHead(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

매개 변수

TYPE
기본 클래스 목록에 저장된 요소의 형식입니다.

newElement
이 목록에 추가할 개체 포인터입니다. NULL 값이 허용됩니다.

BASE_CLASS
형식화된 포인터 목록 클래스의 기본 클래스입니다. 는 포인터 목록 클래스( CObList 또는 CPtrList)여야 합니다.

pNewList
다른 CTypedPtrList 개체에 대한 포인터입니다. pNewList요소가 이 목록에 추가됩니다.

Return Value

첫 번째 버전은 새로 삽입된 요소의 POSITION 값을 반환합니다.

설명

첫 번째 버전은 목록의 머리 앞에 새 요소를 추가합니다. 두 번째 버전은 머리 앞에 다른 요소 목록을 추가합니다.

CTypedPtrList::AddTail

이 멤버 함수는 ::AddTail을 호출BASE_CLASS합니다.

POSITION AddTail(TYPE newElement);
void AddTail(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

매개 변수

TYPE
기본 클래스 목록에 저장된 요소의 형식입니다.

newElement
이 목록에 추가할 개체 포인터입니다. NULL 값이 허용됩니다.

BASE_CLASS
형식화된 포인터 목록 클래스의 기본 클래스입니다. 는 포인터 목록 클래스( CObList 또는 CPtrList)여야 합니다.

pNewList
다른 CTypedPtrList 개체에 대한 포인터입니다. pNewList요소가 이 목록에 추가됩니다.

Return Value

첫 번째 버전은 새로 삽입된 요소의 POSITION 값을 반환합니다.

설명

첫 번째 버전은 목록의 뒷부분에 새 요소를 추가합니다. 두 번째 버전은 목록의 꼬리 뒤의 다른 요소 목록을 추가합니다.

CTypedPtrList::GetAt

POSITION 형식의 변수는 목록의 키입니다.

TYPE& GetAt(POSITION position);
TYPE GetAt(POSITION position) const;

매개 변수

TYPE
목록에 저장된 요소의 형식을 지정하는 템플릿 매개 변수입니다.

위치
이전 GetHeadPosition 또는 Find 멤버 함수 호출에서 반환된 POSITION 값입니다.

Return Value

목록에 대한 포인터 const CTypedPtrListGetAt 를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.

목록이 직접 또는 포인터 CTypedPtrListGetAt 를 통해 액세스되는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터에 대한 참조를 반환합니다. 이렇게 하면 할당 문의 양쪽에서 함수를 사용할 수 있으므로 목록 항목을 수정할 수 있습니다.

설명

인덱스와 동일하지 않으며 POSITION 값에서 직접 작업할 수 없습니다. GetAt 지정된 CObject 위치와 연결된 포인터를 검색합니다.

POSITION 값이 목록에서 유효한 위치를 나타내는지 확인해야 합니다. 잘못된 경우 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다.

이 인라인 함수는 ::GetAt을 호출 BASE_CLASS합니다.

CTypedPtrList::GetHead

이 목록의 헤드 요소를 나타내는 포인터를 가져옵니다.

TYPE& GetHead();
TYPE GetHead() const;

매개 변수

TYPE
목록에 저장된 요소의 형식을 지정하는 템플릿 매개 변수입니다.

Return Value

목록에 대한 포인터 const CTypedPtrListGetHead 를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.

목록이 직접 또는 포인터 CTypedPtrListGetHead 를 통해 액세스되는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터에 대한 참조를 반환합니다. 이렇게 하면 할당 문의 양쪽에서 함수를 사용할 수 있으므로 목록 항목을 수정할 수 있습니다.

설명

를 호출 GetHead하기 전에 목록이 비어 있지 않은지 확인해야 합니다. 목록이 비어 있으면 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다. IsEmpty를 사용하여 목록에 요소가 포함되어 있는지 확인합니다.

CTypedPtrList::GetNext

rPosition으로 식별되는 목록 요소를 가져오고 rPosition을 목록에서 다음 항목의 POSITION 값으로 설정합니다.

TYPE& GetNext(POSITION& rPosition);
TYPE GetNext(POSITION& rPosition) const;

매개 변수

TYPE
이 목록에 포함된 요소의 형식을 지정하는 템플릿 매개 변수입니다.

rPosition
이전 GetNext또는 GetHeadPosition다른 멤버 함수 호출에서 반환된 POSITION 값에 대한 참조입니다.

Return Value

목록에 대한 포인터 const CTypedPtrListGetNext 를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.

목록이 직접 또는 포인터 CTypedPtrListGetNext 를 통해 액세스되는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터에 대한 참조를 반환합니다. 이렇게 하면 할당 문의 양쪽에서 함수를 사용할 수 있으므로 목록 항목을 수정할 수 있습니다.

설명

호출 GetHeadPosition 또는 CPtrList::Find를 사용하여 초기 위치를 설정하는 경우 정방향 반복 루프에서 사용할 GetNext 수 있습니다.

POSITION 값이 목록에서 유효한 위치를 나타내는지 확인해야 합니다. 잘못된 경우 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다.

검색된 요소가 목록의 마지막 요소인 경우 rPosition새 값이 NULL로 설정됩니다.

반복하는 동안 요소를 제거할 수 있습니다. CObList::RemoveAt에 대한 예제를 참조하세요.

CTypedPtrList::GetPrev

rPosition으로 식별되는 목록 요소를 가져온 다음, rPosition을 목록에서 이전 항목의 POSITION 값으로 설정합니다.

TYPE& GetPrev(POSITION& rPosition);
TYPE GetPrev(POSITION& rPosition) const;

매개 변수

TYPE
이 목록에 포함된 요소의 형식을 지정하는 템플릿 매개 변수입니다.

rPosition
이전 GetPrev 또는 다른 멤버 함수 호출에서 반환된 POSITION 값에 대한 참조입니다.

Return Value

목록에 대한 포인터 const CTypedPtrListGetPrev 를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.

목록이 직접 또는 포인터 CTypedPtrListGetPrev 를 통해 액세스되는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터에 대한 참조를 반환합니다. 이렇게 하면 할당 문의 양쪽에서 함수를 사용할 수 있으므로 목록 항목을 수정할 수 있습니다.

설명

호출 GetTailPositionFind사용하여 초기 위치를 설정하는 경우 역방향 반복 루프에서 사용할 GetPrev 수 있습니다.

POSITION 값이 목록에서 유효한 위치를 나타내는지 확인해야 합니다. 잘못된 경우 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다.

검색된 요소가 목록의 첫 번째 요소인 경우 rPosition새 값이 NULL로 설정됩니다.

CTypedPtrList::GetTail

이 목록의 헤드 요소를 나타내는 포인터를 가져옵니다.

TYPE& GetTail();
TYPE GetTail() const;

매개 변수

TYPE
목록에 저장된 요소의 형식을 지정하는 템플릿 매개 변수입니다.

Return Value

목록에 대한 포인터 const CTypedPtrListGetTail 를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.

목록이 직접 또는 포인터 CTypedPtrListGetTail 를 통해 액세스되는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터에 대한 참조를 반환합니다. 이렇게 하면 할당 문의 양쪽에서 함수를 사용할 수 있으므로 목록 항목을 수정할 수 있습니다.

설명

를 호출 GetTail하기 전에 목록이 비어 있지 않은지 확인해야 합니다. 목록이 비어 있으면 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다. IsEmpty를 사용하여 목록에 요소가 포함되어 있는지 확인합니다.

CTypedPtrList::RemoveHead

목록의 머리에서 요소를 제거하고 반환합니다.

TYPE RemoveHead();

매개 변수

TYPE
목록에 저장된 요소의 형식을 지정하는 템플릿 매개 변수입니다.

Return Value

목록의 맨 앞에 있는 포인터입니다. 이 포인터는 템플릿 매개 변수 TYPE에 지정된 형식입니다.

설명

를 호출 RemoveHead하기 전에 목록이 비어 있지 않은지 확인해야 합니다. 목록이 비어 있으면 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다. IsEmpty를 사용하여 목록에 요소가 포함되어 있는지 확인합니다.

CTypedPtrList::RemoveTail

목록의 꼬리에서 요소를 제거하고 반환합니다.

TYPE RemoveTail();

매개 변수

TYPE
목록에 저장된 요소의 형식을 지정하는 템플릿 매개 변수입니다.

Return Value

목록의 뒷부분에 있는 포인터입니다. 이 포인터는 템플릿 매개 변수 TYPE에 지정된 형식입니다.

설명

를 호출 RemoveTail하기 전에 목록이 비어 있지 않은지 확인해야 합니다. 목록이 비어 있으면 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다. IsEmpty를 사용하여 목록에 요소가 포함되어 있는지 확인합니다.

CTypedPtrList::SetAt

이 멤버 함수는 ::SetAt를 호출 BASE_CLASS합니다.

void SetAt(POSITION pos, TYPE newElement);

매개 변수

pos
설정할 요소의 POSITION입니다.

TYPE
기본 클래스 목록에 저장된 요소의 형식입니다.

newElement
목록에 쓸 개체 포인터입니다.

설명

POSITION 형식의 변수는 목록의 키입니다. 인덱스와 동일하지 않으며 POSITION 값에서 직접 작업할 수 없습니다. SetAt 는 개체 포인터를 목록의 지정된 위치에 씁니다.

POSITION 값이 목록에서 유효한 위치를 나타내는지 확인해야 합니다. 잘못된 경우 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다.

자세한 설명은 CObList::SetAt를 참조하세요.

참고 항목

MFC 샘플 COLLECT
계층 구조 차트
CPtrList 클래스
CObList 클래스