|
Expand the Header Files folder, and open file StdAfx.h.
At the end of the file, type:
#include <afxtempl.h> // MFC templates
///////////////////////////////////////////////////////////////////////////////
CTypedPtrList < class BASE_CLASS, class TYPE >
BASE_CLASS Base class of the typed pointer list class;
must be a pointer list class (CObList or CPtrList).
TYPE Type of the elements stored in the base-class list.
The CTypedPtrList class provides a type-safe �wrapper� for objects of class
CPtrList. When you use CTypedPtrList rather than CObList or CPtrList, the
C++ type-checking facility helps eliminate errors caused by mismatched
pointer types.
In addition, the CTypedPtrList wrapper performs much of the casting that
would be required if you used CObList or CPtrList.
==================================================
Class Members
==================================================
AddHead
POSITION AddHead( TYPE newElement );
void AddHead( CTypedPtrList<BASE_CLASS, TYPE> *pNewList );
AddTail
POSITION AddTail( TYPE newElement );
void AddTail( CTypedPtrList<BASE_CLASS, TYPE> *pNewList );
GetAt
TYPE& GetAt( POSITION position );
TYPE GetAt( POSITION position ) const;
GetHead
TYPE& GetHead( );
TYPE GetHead( ) const;
GetNext
TYPE& GetNext( POSITION& rPosition );
TYPE GetNext( POSITION& rPosition ) const;
GetPrev
TYPE& GetPrev(POSITION& rPosition );
TYPE GetPrev( POSITION& rPosition ) const;
GetTail
TYPE& GetTail( );
TYPE GetTail( ) const;
RemoveHead
TYPE RemoveHead( );
RemoveTail
TYPE RemoveTail( );
SetAt
void SetAt( POSITION pos, TYPE newElement );
==================================================
Create
==================================================
typedef CTypedPtrList<CPtrList, CMyStruct*> CMyStructList;
CMyStructList m_myPtrList;
typedef CTypedPtrList<CObList, CMyObject*> CMyObList;
CMyObList m_myObList;
==================================================
Insert
==================================================
CMyStruct* pMyStruct = new CMyStruct();
pMyStruct->m_int = 1234;
pMyStruct->m_float = 12.34f;
pMyStruct->m_str.LoadString(IDS_INITIAL_STRING);
m_myPtrList.AddTail(pMyStruct);
m_myPtrList.InsertBefore(pos, pMyStruct);
CMyObject* pMyObject = new CMyObject();
m_myObList.AddTail(pMyObject);
==================================================
Iterate
==================================================
POSITION pos = m_myPtrList.GetHeadPosition();
while( pos != NULL )
{
CMyStruct* pMyStruct = m_myPtrList.GetNext( pos );
}
==================================================
Find
==================================================
pos = m_myPtrList.Find(pMyStruct);
==================================================
Update
==================================================
m_myPtrList.SetAt(pos, pMyStruct);
==================================================
Delete
==================================================
m_myPtrList.RemoveAt(pos);
POSITION pos = m_myPtrList.GetHeadPosition();
while (pos != NULL)
{
delete m_myPtrList.GetNext(pos);
}
m_myPtrList.RemoveAll();
while (!m_myObList.IsEmpty())
{
delete m_myObList.GetHead();
m_myObList.RemoveHead();
}
==================================================
Serialize
==================================================
nCount = (WORD)m_myPtrList.GetCount();
if (ar.IsStoring())
{
ar << nCount;
pos = m_myPtrList.GetHeadPosition();
while (pos != NULL)
{
CMyStruct* pMyStruct = m_myPtrList.GetNext(pos);
w = (WORD)pMyStruct->m_int;
ar << w;
ar << pMyStruct->m_float;
ar << pMyStruct->m_str;
nCount--;
}
ASSERT(nCount == 0);
}
else
{
ar >> nCount;
while (nCount-- > 0)
{
CMyStruct* pMyStruct = new CMyStruct;
ar >> w;
pMyStruct->m_int = w;
ar >> pMyStruct->m_float;
ar >> pMyStruct->m_str;
m_myPtrList.AddTail(pMyStruct);
}
}
m_myObList.Serialize(ar);
// Note: CMyObject serializes itself
void CMyObject::Serialize(CArchive& ar)
{
CObject::Serialize( ar );
if( ar.IsStoring() )
ar << i;
else
ar >> i;
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.