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++ 형식 검사 기능을 사용하는 대신 CObList
CPtrList
사용하면 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 CTypedPtrList
GetAt
를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.
목록이 직접 또는 포인터 CTypedPtrList
GetAt
를 통해 액세스되는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터에 대한 참조를 반환합니다. 이렇게 하면 할당 문의 양쪽에서 함수를 사용할 수 있으므로 목록 항목을 수정할 수 있습니다.
설명
인덱스와 동일하지 않으며 POSITION 값에서 직접 작업할 수 없습니다. GetAt
지정된 CObject
위치와 연결된 포인터를 검색합니다.
POSITION 값이 목록에서 유효한 위치를 나타내는지 확인해야 합니다. 잘못된 경우 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다.
이 인라인 함수는 ::GetAt을 호출 BASE_CLASS
합니다.
CTypedPtrList::GetHead
이 목록의 헤드 요소를 나타내는 포인터를 가져옵니다.
TYPE& GetHead();
TYPE GetHead() const;
매개 변수
TYPE
목록에 저장된 요소의 형식을 지정하는 템플릿 매개 변수입니다.
Return Value
목록에 대한 포인터 const CTypedPtrList
GetHead
를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.
목록이 직접 또는 포인터 CTypedPtrList
GetHead
를 통해 액세스되는 경우 템플릿 매개 변수 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 CTypedPtrList
GetNext
를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.
목록이 직접 또는 포인터 CTypedPtrList
GetNext
를 통해 액세스되는 경우 템플릿 매개 변수 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 CTypedPtrList
GetPrev
를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.
목록이 직접 또는 포인터 CTypedPtrList
GetPrev
를 통해 액세스되는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터에 대한 참조를 반환합니다. 이렇게 하면 할당 문의 양쪽에서 함수를 사용할 수 있으므로 목록 항목을 수정할 수 있습니다.
설명
호출 GetTailPosition
을 Find
사용하여 초기 위치를 설정하는 경우 역방향 반복 루프에서 사용할 GetPrev
수 있습니다.
POSITION 값이 목록에서 유효한 위치를 나타내는지 확인해야 합니다. 잘못된 경우 Microsoft Foundation 클래스 라이브러리의 디버그 버전이 어설션됩니다.
검색된 요소가 목록의 첫 번째 요소인 경우 rPosition의 새 값이 NULL로 설정됩니다.
CTypedPtrList::GetTail
이 목록의 헤드 요소를 나타내는 포인터를 가져옵니다.
TYPE& GetTail();
TYPE GetTail() const;
매개 변수
TYPE
목록에 저장된 요소의 형식을 지정하는 템플릿 매개 변수입니다.
Return Value
목록에 대한 포인터 const CTypedPtrList
GetTail
를 통해 액세스하는 경우 템플릿 매개 변수 TYPE에 지정된 형식의 포인터를 반환합니다. 이렇게 하면 함수를 대입 문의 오른쪽에서만 사용할 수 있으므로 목록이 수정되지 않도록 보호합니다.
목록이 직접 또는 포인터 CTypedPtrList
GetTail
를 통해 액세스되는 경우 템플릿 매개 변수 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를 참조하세요.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기