kyuseo의 게임 프로그래밍

CArray, CList, CMap :: GetSize() GetCount() MFC 템플릿 클래스의 규격화 방법 본문

C++ 개발

CArray, CList, CMap :: GetSize() GetCount() MFC 템플릿 클래스의 규격화 방법

kyuseo 2008. 4. 1. 13:51

개요..

 

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 );

};