C++模板類的用法實例。本站提示廣大學習愛好者:(C++模板類的用法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C++模板類的用法實例正文
本文實例講述了C++中模板類的用法,分享給年夜家供年夜家參考。詳細辦法以下:
//#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public: CSimpleList(int nNextOffset=0); void Construct(int nNextOffset); //接口 BOOL IsEmpty() const; void AddHead(void *p); void RemoveAll(); void* GetHead() const; void* GetNext(void* preElement) const; BOOL Remove(void* p); //為完成接口所需的成員 void *m_pHead; size_t m_nextOffset; void** GetNextPtr(void* preElement) const; }; //類的內聯函數 inline CSimpleList::CSimpleList(int nNextOffset) {m_pHead = NULL; m_nextOffset = nNextOffset; } inline void CSimpleList::Construct(int nNextOffset) {m_nextOffset = nNextOffset; } inline BOOL CSimpleList::IsEmpty() const { return m_pHead==NULL; } //inline void AddHead(void *p) //{ // //} inline void CSimpleList::RemoveAll() { m_pHead = NULL; } inline void* CSimpleList::GetHead() const { return m_pHead; } inline void* CSimpleList::GetNext(void* preElement) const { return *GetNextPtr(preElement); } //inline BOOL CSimpleList::Remove(void* p) //{ // //} inline void** CSimpleList::GetNextPtr(void* preElement) const { return (void**)((BYTE*)preElement+m_nextOffset); } //界說模板類 template<class TYPE> class CTypedSimpleList:public CSimpleList { public: CTypedSimpleList(int nNextOffset=0) :CSimpleList(nNextOffset){} void Construct(int nNextOffset); //接口 void AddHead(TYPE p) { CSimpleList::AddHead((void*)p); } TYPE GetHead() { return (TYPE)CSimpleList::GetHead(); } TYPE GetNext(TYPE preElement) { return (TYPE)CSimpleList::GetNext((void*)preElement); } BOOL Remove(TYPE p) { return CSimpleList::Remove(p); } //直接援用類的對象會挪用此函數 operator TYPE() { return (TYPE)CSimpleList::GetHead(); } }; #endif
模板類的用法:
//測試模板類 MyThreadData* pTempData; CTypedSimpleList<MyThreadData*> templateList; list.Construct(offsetof(MyThreadData, pNext)); //向鏈表中加數據 for (int i=100;i<110;i++) { pTempData = new MyThreadData; pTempData->nShortData = i; templateList.AddHead(pTempData); } //遍歷鏈表,釋放對象占用的資本 pTempData = templateList; while (pTempData) { MyThreadData* pNextTempData = pTempData->pNext; printf("TemplateDateList=%d\n",pTempData->nShortData); delete pTempData; pTempData = pNextTempData; }
願望本文所述對年夜家的C++法式設計有所贊助。