KEY 매개 변수는 CString 형식이고 KEY_TYPE 매개 변수는 LPCSTR 형식이므로 키는 CString 형식의 항목으로 맵에 저장되지만 LPCSTR 형식의 포인터를 통해 SetAt와 같은 함수에서 참조됩니다. 예를 들어 C++가 인기 있는 언어인 한 가지 이유는 클래스 라이브러리를 통해 “확장”할 수 있기 때문입니다. 일부 클래스 라이브러리는 C++ 컴파일러와 함께 제공되며, 다른 라이브러리는 타사 소프트웨어 회사에서 판매하며 다른 라이브러리는 사내에서 개발됩니다. 클래스 라이브러리는 응용 프로그램에서 사용할 수 있는 관련 C++ 클래스의 집합입니다. 예를 들어 수학 클래스 라이브러리는 일반적인 수학 연산을 수행할 수 있으며 통신 클래스 라이브러리는 직렬 링크를 통해 데이터 전송을 지원할 수 있습니다. 경우에 따라 제공된 클래스의 개체를 생성합니다. 때로는 자신의 클래스를 파생, 그것은 모두 특정 클래스 라이브러리의 디자인에 따라 달라집니다. MFC에 사용되는 표기는 헝가리어와 카멜케이스의 혼합입니다. MFC/Windows 프로그래밍에 이미 익숙한 경우 사용된 표기명에 따라 변수, 클래스, 개체 등과 같은 코드를 인식할 수 있습니다. 예를 들어 MFC 라이브러리 클래스 이름은 CScrollView와 같은 문자 C와 m_로 접두사된 변수로 시작합니다. Microsoft 재단 클래스 라이브러리(MFC 라이브러리)는 이 자습서에서 학습할 응용 프로그램 프레임워크를 정의합니다. MFC는 다양한 요구를 충족하도록 설계된 다양한 클래스를 제공합니다. MFC 7.0 클래스 계층 구조의 편리한 다이어그램은 여기에서 확인할 수 있습니다.

대부분의 MFC 클래스는 CObject에서 직접 또는 간접적으로 파생됩니다. CObject는 파생 클래스에도 다른 유용한 이점을 제공합니다. 예를 들어 새 연산자와 삭제 연산자의 오버로드를 통해 메모리 누수에 대한 보호를 제공합니다. CObject 파생 클래스에서 개체를 만들고 응용 프로그램이 종료되기 전에 개체를 삭제하지 못하면 MFC는 디버그 출력 창에 메시지를 작성하여 경고합니다. MFC 클래스에 익숙해지면서 가장 기본적인 MFC 클래스의 중요성은 점점 더 분명해질 것입니다. 물론 매크로에 넣자마자 파산했습니다… 문제는 템플릿의 부분 사이에 필요한 쉼표가 두 개의 매크로 매개 변수가 된다는 것입니다. 나는 신속하게 빠른 수정, 명시적으로 여분의 템플릿 매개 변수를 했다 매크로를 썼다.

문제는 이것이 못생겼다는 것이었습니다 (이제 템플릿 메시지 맵 매크로가 2 개 있음) 확장 할 수 없었습니다. 매개 변수가 3개인 템플릿이 필요하거나 기본 클래스에 여러 템플릿 매개 변수가 필요한 경우 대처하기 위해 복잡한 매크로를 변경해야 했습니다. 이 무렵, 나는 데이브 로드에서 비슷한 문제를 언급하는 방명록에 메시지를 보았다 … 입력된 포인터 맵 클래스인 CTypedPtrMap은 BASE_CLASS, KEY 및 VALUE의 세 가지 매개 변수를 사용합니다. BASE_CLASS 매개 변수는 CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb 등 새 클래스를 파생하는 클래스를 지정합니다. KEY는 CMap의 KEY와 유사합니다: 조회에 사용되는 키의 유형을 지정합니다.