Enhanced collection template classes: CArrayEx, CMapEx and CSortedArray
Posted 2009/03/31 16:02|
|
|
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
출처 : http://www.codeguru.com/cpp/cpp/cpp_mfc/collections/article.php/c889#more
Motivation for CArrayEx, CMapEx
Many of us have tried to create a 2 dimensional array using MFC's standard CArray class, only to encounter the following error:
Example 1:
typedef CArray <int,int> CIntArray; CArray<CIntArray, CIntArray &> a2D; CIntArray aInt; a2D.Add (aInt); // error C2582 ****
Example 2:
typedef CMap<int,int,int,int> CIntMap; CMap<int,int,CIntMap,CIntMap &> m2D; CIntMap mInt; m2D.SetAt (1, mInt); // error C2582 ****
The error occurs because CArray doesn't have copy a constructor and an assignment operator. The need for these is obvious. If we create array of pointers [CArray<void,void>], we need to copy not only the pointer, but also the values. Microsoft refers us to their knowledge base articles "Collection Class Helpers" and "Collections: How to Make a Type-Safe Collection" for more information.
The problem is solved using CArrayEx:
typedef CArrayEx<int,int> CIntArray; CArrayEx<CIntArray, CIntArray &> a2D; CIntArray aInt; a2D.Add (aInt); // OK
and by using CMapEx:
typedef CMapEx<int,int,int,int> CIntMap; CMapEx<int,int,CIntMap,CIntMap &> m2D; CIntMap mInt; m2D.SetAt (1, mInt); // OK
Another motivation for CMapEx
If you've tried to create a mapping (using CMap) with a CString key, you'd have encountered the following error:
CMap<CString,CString,int,int> a; a.SetAt (CString("a"), 1); // error: cannot convert from 'class CString' to 'unsigned long'
This happens because there's no function to hash a CString to an unsigned long. CMapEx addresses this problem by providing aHashKey() function.
template<> inline UINT AFXAPI HashKey<CString> (CString strKey) { LPCSTR key = strKey; UINT nHash = 0; while (*key) nHash = (nHash<<5) + nHash + *key++; return nHash; }
Motivation for CSortedArray
CSortedArray allows you to easily find data (by doing a binary search) because it maintains itself in sorted order.
Downloads
Download demo project - 17 Kb위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
- Filed under : 프로그래밍/MFC & Win32
- Comment Trackback


excoll.zip