템플릿 기반 클래스
이 문서에서는 MFC 버전 3.0 이상에서 템플릿 기반 형식 안전 컬렉션 클래스를 설명합니다.이러한 서식 파일을 사용 하 여 형식 안전 컬렉션을 만들 수 보다 편리 하 고 도움이 비템플릿 기반 컬렉션 클래스를 사용 하 여 보다 효과적으로 형식 안전성을 제공 합니다.
MFC 템플릿 기반 컬렉션의 두 가지 미리 정의 합니다.
단순 배열, 목록 및 맵 클래스
CArray, CList, CMap
배열, 목록 및 맵을 형식화 된 포인터
CTypedPtrArray, CTypedPtrList, CTypedPtrMap
단순 컬렉션 클래스는 모든 클래스에서 파생 됩니다 CObject, serialization, 동적 생성 및 기타 속성을 상속 받으므로 CObject.형식화 된 포인터 컬렉션 클래스에서 파생 되는 클래스를 지정 하도록 요구-해야 같은 MFC에서 미리 정의 된 비템플릿 기반 포인터 컬렉션의 CPtrList 또는 CPtrArray.새로운 컬렉션 클래스는 지정 된 기본 클래스에서 상속 및 캡슐화 된 호출을 기본 클래스 멤버가 새 클래스의 멤버 함수를 사용 하 여 형식 안정성이 커집니다.
C + + 템플릿에 대 한 자세한 내용은 템플릿 에 있는 C++ 언어 참조.
단순 배열, 목록 및 맵 템플릿 사용
단순 컬렉션 템플릿을 사용 하려면 어떤 종류의 데이터를 이러한 컬렉션에 저장할 수 있습니다와 컬렉션 선언에서 사용할 매개 변수를 알아야 합니다.
단순 배열 및 목록 사용법
단순 배열 및 목록 클래스는 CArray 및 CList, 두 개의 매개 변수를 사용: 형식 및 ARG_TYPE.이러한 클래스에 지정 되는 모든 데이터 형식을 저장할 수 있는 형식 매개 변수:
같은 기본적인 C++ 데이터 형식 int, char, 및 부동 소수점
C + + 구조체 및 클래스
사용자가 정의한 기타 형식
편리 하 고 효율적으로 사용할 수 있는 ARG_TYPE 함수 인수 유형을 지정 하는 매개 변수.일반적으로 사용자가 지정한 ARG_TYPE 에서 명명 된 형식에 대 한 참조를 형식 매개 변수.예를 들면 다음과 같습니다.
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
첫 번째 예제는 배열 컬렉션 선언 myArray, 포함 된 ints.목록 컬렉션의 두 번째 예제를 선언 myList, 해당 저장 CPerson 개체입니다.특정 컬렉션 클래스의 멤버 함수는 형식이 지정 된 인수는 ARG_TYPE 템플릿 매개 변수가 있습니다.예를 들어,는 추가 클래스의 멤버 함수 CArray 되는 ARG_TYPE 인수:
CArray<CPerson, CPerson&> personArr;
CPerson person;
personArr.Add(person);
단순 맵 사용법
단순 맵 클래스, CMap, 네 개의 매개 변수: 키, ARG_KEY, 값, 및 ARG_VALUE.배열 및 목록 클래스와 마찬가지로 맵 클래스는 모든 데이터 형식을 저장할 수 있습니다.배열 및 목록, 인덱스 및 저장 데이터 순서를 달리 맵은 키와 값을 연결 합니다: 연결 된 키의 값을 지정 하 여 맵에 저장 된 값에 액세스 합니다.키 매개 변수 맵에 저장 된 데이터에 액세스 하는 데 사용 되는 키의 데이터 형식을 지정 합니다.경우 유형을 키 구조체 또는 클래스입니다 있는 ARG_KEY 매개 변수에서 지정 된 형식에 대 한 참조는 일반적으로 키.값 매개 변수 맵에 저장 된 항목의 형식을 지정 합니다.경우 유형을 ARG_VALUE 구조체 또는 클래스입니다 있는 ARG_VALUE 매개 변수에서 지정 된 형식에 대 한 참조는 일반적으로 값.예를 들면 다음과 같습니다.
CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;
첫 번째 예제에서는 저장소 MY_STRUCT 값을 액세스 하 여 int 키 및 액세스 반환 MY_STRUCT 항목을 참조 합니다.두 번째 예제에서는 저장소 CPerson 값을 액세스 하 여 CString 키, 및 액세스 한 항목에 대 한 참조를 반환 합니다.이 예제에서는 마지막 이름으로 사람을 찾기는 간단한 주소록을 나타낼 수 있습니다.
때문에 키 매개 변수는 유형의 CString 및 KEY_TYPE 매개 변수 유형입니다 LPCSTR, 키 맵에 항목 형식으로 저장 됩니다 CString 같은 함수에서 참조 되지만 SetAt 형식의 포인터를 통해 LPCSTR.예를 들면 다음과 같습니다.
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
CPerson person;
LPCTSTR lpstrName = _T("Jones");
myMap.SetAt(lpstrName, person);
형식화 된 포인터 컬렉션 템플릿 사용
형식화 된 포인터 컬렉션 템플릿을 사용 하려면 어떤 종류의 데이터를 이러한 컬렉션에 저장할 수 있습니다와 컬렉션 선언에서 사용할 매개 변수를 알아야 합니다.
형식화 된 포인터 배열 및 목록 사용법
형식화 된 포인터 배열과 목록 클래스, CTypedPtrArray 및 CTypedPtrList, 두 개의 매개 변수를 사용: BASE_CLASS 및 형식.이러한 클래스에 지정 되는 모든 데이터 형식을 저장할 수 있는 형식 매개 변수.이러한 포인터를 저장 하는 비템플릿 기반 컬렉션 클래스 중 하나에서 파생 됩니다. 이 기본 클래스에 지정할 BASE_CLASS.배열에 대 한 사용 CObArray 또는 CPtrArray.목록에 하나를 사용 합니다. CObList 또는 CPtrList.
사실에 기초 하 여 컬렉션을 선언할 때 말할 CObList, 새 클래스 뿐 아니라 해당 기본 클래스의 멤버를 상속 하지만 추가 형식 안전적인 구성원의 숫자를 함수 및 기본 클래스 멤버에 대 한 호출을 캡슐화 하 여 형식 안전성을 제공 하는 연산자 선언 합니다.이러한 encapsulations 필요한 모든 형식 변환이 관리 됩니다.예를 들면 다음과 같습니다.
CTypedPtrArray<CObArray, CPerson*> myArray;
CTypedPtrList<CPtrList, MY_STRUCT*> myList;
첫 번째 예제는 형식화 된 포인터 배열 선언 myArray에서 파생 된 CObArray.저장 하 고에 대 한 포인터를 반환 하는 배열 CPerson 개체 (위치 CPerson 클래스에서 파생 된 CObject).호출 수 있습니다 CObArray 또는 멤버 함수를 호출할 수 있습니다 새 형식이 안전한 GetAt 및 ElementAt 함수 또는 형식 안전 사용 연산자.
두 번째 예제는 형식화 된 포인터 목록 선언 myList에서 파생 된 CPtrList.목록 저장 고에 대 한 포인터를 반환 합니다. MY_STRUCT 개체입니다.클래스 기반 CPtrList 에서 파생 되지 않은 개체에 대 한 포인터를 저장 하는 데 사용 됩니다 CObject.CTypedPtrListhas a number of type-safe member functions: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, and GetAt.
형식화 된 포인터 맵 사용
형식화 된 포인터 map 클래스, CTypedPtrMap, 세 개의 매개 변수: BASE_CLASS, 키, 및 값.BASE_CLASS 매개 변수는 새 클래스를 파생할 클래스 지정: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb등.키 유사 합니다 키 에서 CMap: 해당 조회에 사용 되는 키의 형식을 지정 합니다.값 유사 합니다 값 에서 CMap: 해당 맵에 저장 된 개체의 형식을 지정 합니다.예를 들면 다음과 같습니다.
CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;
지도 따라 첫 번째 예제는 CMapPtrToPtr-사용 CString 에 대 한 포인터를 매핑할 키 MY_STRUCT.형식이 안전한 호출 하 여 저장 된 포인터를 볼 수 있습니다 Lookup 멤버 함수입니다.사용할 수 있는 연산자를 발견 하는 저장 된 포인터를 확인 하 고 없으면 추가할.고 형식 안전적 맵 반복할 수 GetNextAssoc 함수.함수를 클래스의 다른 멤버를 호출할 수도 있습니다 CMapPtrToPtr.
지도 따라 두 번째 예제는 CMapStringToOb-저장된에 대 한 포인터를 매핑할 문자열 키를 사용 하 여 CMyObject 개체입니다.이전 단락에서 설명한 동일한 안전한 형식의 멤버를 사용할 수 있습니다 또는 클래스의 멤버를 호출할 수 있습니다 CMapStringToOb.
[!참고]
지정 하는 경우는 클래스 또는 struct 입력은 값 매개 변수 보다는 포인터 또는 참조 유형, 클래스 또는 구조체에 복사 생성자가 있어야 합니다.
자세한 내용은 형식 안전 컬렉션을 만드는 방법.