kyuseo의 게임 프로그래밍
CArray, CList, CMap :: GetSize() GetCount() MFC 템플릿 클래스의 규격화 방법 본문
개요.. |
MFC 6.0 에서 CArray, CList, CMap 클래스는 GetSize() 함수와 GetCount() 가 혼용으로 사용되어 불편한 경우가 많습니다.
이를 규격화하여 하나의 함수를 호출하는 방법을 알려드립니다.
방법 |
1. MFC 7.0 으로 업그레이드 합니다.
MFC 7.0 에서는 GetSize() 함수와 GetCount()함수를 모두 사용할 수 있습니다.
하지만 하나의 코드로 통일하여 사용하시기를 권장합니다. (Kyuseo 는 GetSize() 를 사용합니다.)
2. MFC 템플릿 클래스를 상속받아 함수를 만듭니다.
아래와 같이 CArray 를 상속받아 자신이 원하는 형태의 CArray 를 만들어 사용합니다.
/** @class CPArray @date 2006/3/3 @author 채경석(kyuseo99@chol.com, http://a.tk.co.kr) @brief */ template< class TYPE, class ARG_TYPE > class CPArray : public CArray< TYPE, ARG_TYPE > { public: using CArray< TYPE, ARG_TYPE >::GetCount;
INT_PTR GetCount( ARG_TYPE t, INT_PTR nStart = 0 ) const; ///< 주어진인자의총개수를구한다. INT_PTR Find( ARG_TYPE t, INT_PTR nStart = 0 ) const; ///< 주어진인자의첫번째것을찾는다. INT_PTR Delete( ARG_TYPE t, INT_PTR nStart = 0 ); ///< 주어진인자에해당하는것을지운다. (리턴:지워진개수)
TYPE& GetHead(); const TYPE& GetHead() const; TYPE& GetTail(); const TYPE& GetTail() const;
TYPE RemoveHead(); TYPE RemoveTail();
void Sort( BOOL bDesc = FALSE ); ///< 정렬한다. ( 해당TYPE 은>, <, == 가정의되어있어야한다. ) void Sort( int ( __cdecl *Compare )( const void *pArg1, const void *pArg2 ) ); ///< 외부함수로정렬한다. void Suffle( int nCount = 5 ); ///< 섞는다.
// 자체메모리할당된포인터전용함수 void DeleteRemovtAt( INT_PTR nIndex, INT_PTR nCount = 1 ); ///< delete 하고RemoveAt 한다. void DeleteRemoveAll(); ///< delete 하고RemoveAll 한다.
protected: static int CompareAsc( const void *pArg1, const void *pArg2 ); static int CompareDesc( const void *pArg1, const void *pArg2 ); }; |