태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


댓글 하나가 운영자에겐 커다란 힘이 됩니다!

출처 : 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:

error C2582: 'operator =' function is unavailable

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 

위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!

Write your message and submit
« PREV : 1 : ... 78 : 79 : 80 : 81 : 82 : 83 : 84 : 85 : 86 : ... 436 : NEXT »