다음을 통해 공유


방법: 형식 안전 컬렉션을 확인 하십시오.

이 문서는 자신의 데이터 형식에 대해 형식 안전 컬렉션을 만드는 방법을 설명 합니다.다음 내용을 다룹니다.

  • 형식 안정성을 위해 템플릿 기반 클래스를 사용합니다.

  • 도우미 함수 구현

  • 비템플릿 기반 컬렉션 클래스 사용

Mfc 라이브러리는 C++ 템플릿을 기반으로 하는 미리 정의 된 형식 안전 컬렉션을 제공 합니다.서식 파일이 있으므로 이러한 클래스 형식 안전성 및 형식 캐스팅 및 기타 비템플릿 기반 클래스를이 용도로 사용과 관련 된 추가 작업 없이 사용 용이성을 제공할 수 있습니다.MFC 샘플 수집 MFC 응용 프로그램에 템플릿 기반 컬렉션 클래스의 사용 방법을 보여 줍니다.일반적으로 새 컬렉션 코드를 작성할 언제 든 지 이러한 클래스를 사용 합니다.

형식 안정성을 위해 템플릿 기반 클래스를 사용합니다.

템플릿 기반 클래스를 사용 합니다.

  1. 컬렉션 클래스 형식의 변수를 선언 합니다.예를 들면 다음과 같습니다.

    CList<int, int> m_intList;
    
  2. 함수의 컬렉션 개체의 멤버를 호출 합니다.예를 들면 다음과 같습니다.

    m_intList.AddTail(100);
    m_intList.RemoveAll();
    
  3. 필요 하다 면 구현에서 도우미 함수SerializeElements.이러한 기능을 구현에 대 한 내용은 을 구현 하는 도우미 함수.

정수 목록 선언 하는 예제입니다.1 단계의 첫째 매개 변수는 목록의 요소로 저장 된 데이터의 형식입니다.두 번째 매개 변수는 데이터를 전달 하 고 같은 컬렉션 클래스의 멤버 함수에서 반환 하는 방식을 지정 추가GetAt.

도우미 함수 구현

템플릿 기반 컬렉션 클래스 CArray, CList, 및 CMap 파생된 컬렉션 클래스에 대 한 필요에 따라 사용자 지정할 수 있는 5 개의 글로벌 도우미 함수를 사용 합니다.이러한 도우미 함수에 대 한 자세한 내용은 컬렉션 클래스의 도우미 에 있는 MFC 참조.대부분의 템플릿 기반 컬렉션 클래스 사용에 대 한 serialization 함수 구현이 필요합니다.

6s70zdb8.collapse_all(ko-kr,VS.110).gif요소를 serialize합니다.

CArray, CList, 및 CMap 클래스를 호출 SerializeElements 컬렉션의 요소를 저장 또는 보관 파일에서 읽을 수 있습니다.

기본 구현에서 SerializeElements 도우미 함수 비트 쓰기 개체를 보관 저장소에 없거나 연산을 아카이브에서 여부 개체에 저장 되는 따라 개체를 읽거나 보관 저장소에서 검색 합니다.재정의 SerializeElements 이 동작에 적합 하지 않은 경우.

컬렉션에서 파생 된 개체를 저장 하는 경우 CObject 사용은 IMPLEMENT_SERIAL 매크로 요소 컬렉션 클래스의 구현에 serialization 기능 내장에 걸릴 수 있습니다 CArchiveCObject:

CArray< CPerson, CPerson& > personArray;

template <> void AFXAPI SerializeElements <CPerson> (CArchive& ar, 
   CPerson* pNewPersons, INT_PTR nCount)
{
   for (int i = 0; i < nCount; i++, pNewPersons++)
   {
      // Serialize each CPerson object
      pNewPersons->Serialize(ar);
   }
}

삽입을 오버 로드 된 연산자에 대 한 CArchive 호출 CObject::Serialize (또는 해당 함수를 재정의) 각 CPerson 개체입니다.

비템플릿 기반 컬렉션 클래스 사용

MFC에서는 MFC 버전 1.0에 도입 된 컬렉션 클래스를 지원 합니다.이러한 클래스 템플릿은 사용 하지 않습니다.지원 되는 형식의 데이터를 포함 하도록 사용할 수 있습니다 CObject*, UINT, DWORD, 및 CString.이러한 미리 정의 된 컬렉션을 사용할 수 있습니다 (같은 CObList)에서 파생 된 모든 개체의 컬렉션을 저장할 수 CObject.MFC에는 또한 기본 형식 같은 보유할 다른 미리 정의 된 컬렉션 제공 UINT 및 void 포인터 (void*).그러나 일반적으로, 개체 클래스와 그 파생물을 직접 형식 안전 컬렉션을 정의 하는 데 유용한 경우가 많습니다.비템플릿 기반 컬렉션 클래스를 그렇게 하지 템플릿 기반 클래스를 사용 하 여 보다 더 많은 작업입니다.

비템플릿 기반 컬렉션으로 형식 안전 컬렉션을 만드는 데는 두 가지 방법이 있습니다.

  1. 비템플릿 기반 컬렉션 형식이 필요한 경우을 사용 합니다.이 쉬운 방법입니다.

  2. 파생 하 고 비템플릿 기반 형식 안전 컬렉션을 확장 합니다.

형식 비템플릿 기반 컬렉션을 사용 하려면

  • 비템플릿 기반 클래스 중 하나를 같은 사용 CWordArray, 직접.

    예를 들어 만들 수 있습니다는 CWordArray 및 32 비트 값을 추가한 다음 검색할.방법은 더 이상 하지 마십시오입니다.단순히 미리 정의 된 기능을 사용 합니다.

    또한 미리 정의 된 컬렉션에 같은 사용할 수 있습니다 CObList에서 파생 된 모든 개체를 보유 하 고 CObject.A CObList 컬렉션에 대 한 포인터를 보유할 정의 CObject.목록에서 개체를 검색할 때 결과 이후에 적절 한 형식으로 캐스팅 해야는 CObList 함수에 대 한 포인터를 반환 합니다. CObject.예를 들어, 사용자가 저장 하는 경우 CPerson 개체는 CObList 컬렉션에 있는 검색된 요소 수에 대 한 포인터를 캐스팅 하는 CPerson 개체.다음 예제는 CObList 보유 하는 컬렉션 CPerson 개체:

    CPerson* p1 = new CPerson();
    CObList myList;
    
    myList.AddHead(p1);   // No cast needed
    CPerson* p2 = (CPerson*)myList.GetHead();
    

    이 기술을 미리 정의 된 컬렉션 형식을 사용 하 고 필요할 때 캐스팅의 다양 한 컬렉션 요구 사항에 적합할 수 있습니다.추가 기능이 나 좀더 강력한 형식 안정성이 필요한 경우 템플릿 기반 클래스를 사용 하거나 다음 절차를 따르십시오.

비템플릿 기반 형식 안전 컬렉션을 확장 하 고 파생

  • 자신만 컬렉션 클래스는 미리 정의 된 비템플릿 기반 클래스 중 하나에서 파생 됩니다.

    클래스를 파생 시킬 때 형식 안전 래퍼 함수를 기존 함수에 대 한 형식 안전 인터페이스를 제공할 수를 추가할 수 있습니다.

    예를 들어, 목록에서 파생 된 경우 CObList 보유할 CPerson 개체를 래퍼 함수를 추가할 수 있습니다 AddHeadPerson 및 GetHeadPerson, 아래와 같이.

    class CPersonList : public CObList
    {
    public:
        void AddHeadPerson( CPerson* person )
            {AddHead( person );}
    
        const CPerson* GetHeadPerson()
            {return (CPerson*)GetHead();}
    };
    

    이러한 래퍼 함수를 추가 하 고 검색 하는 형식 안전 방법을 제공 CPerson 개체에서 파생 된 목록입니다.에 대 한 것을 볼 수 있는 GetHeadPerson 함수를 형식으로 캐스팅 하기만 하면 캡슐화 하는.

    또한 형식 안전 래퍼에 기존 기능을 단지 배치 것이 아니라 컬렉션의 기능을 확장 하는 새 함수를 정의 하 여 새 기능을 추가할 수 있습니다.예를 들어, 문서 CObject 컬렉션의 모든 개체 삭제 목록에 포함 된 모든 개체를 삭제 하는 함수에 설명 합니다.이 함수는 파생 된 클래스에 멤버 함수로 추가할 수 있습니다.

참고 항목

개념

컬렉션