C++模板類的用法實(shí)例
更新時(shí)間:2014年10月12日 09:44:24 投稿:shichen2014
這篇文章主要介紹了C++模板類的用法實(shí)例,以實(shí)例形式詳細(xì)講述了模板類的接口、成員、內(nèi)聯(lián)函數(shù)等概念及用法,需要的朋友可以參考下
本文實(shí)例講述了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);
//為實(shí)現(xiàn)接口所需的成員
void *m_pHead;
size_t m_nextOffset;
void** GetNextPtr(void* preElement) const;
};
//類的內(nèi)聯(lián)函數(shù)
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);
}
//直接引用類的對(duì)象會(huì)調(diào)用此函數(shù)
operator TYPE()
{
return (TYPE)CSimpleList::GetHead();
}
};
#endif
模板類的用法:
//測(cè)試模板類
MyThreadData* pTempData;
CTypedSimpleList<MyThreadData*> templateList;
list.Construct(offsetof(MyThreadData, pNext));
//向鏈表中加數(shù)據(jù)
for (int i=100;i<110;i++)
{
pTempData = new MyThreadData;
pTempData->nShortData = i;
templateList.AddHead(pTempData);
}
//遍歷鏈表,釋放對(duì)象占用的資源
pTempData = templateList;
while (pTempData)
{
MyThreadData* pNextTempData = pTempData->pNext;
printf("TemplateDateList=%d\n",pTempData->nShortData);
delete pTempData;
pTempData = pNextTempData;
}
希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。
相關(guān)文章
C++詳解使用floor&ceil&round實(shí)現(xiàn)保留小數(shù)點(diǎn)后兩位
這篇文章主要介紹了C++使用floor&ceil&round實(shí)現(xiàn)保留小數(shù)點(diǎn)后兩位的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
C/C++編程語(yǔ)言中的指針(pointer)你了解嗎
這篇文章主要為大家詳細(xì)介紹了C/C++編程語(yǔ)言中的指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
C語(yǔ)言之把數(shù)組名作函數(shù)參數(shù)的四種情況說(shuō)明
這篇文章主要介紹了C語(yǔ)言之把數(shù)組名作函數(shù)參數(shù)的四種情況說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
如何用C寫(xiě)一個(gè)web服務(wù)器之CGI協(xié)議
本文主要介紹了如何用C寫(xiě)一個(gè)web服務(wù)器之CGI協(xié)議,對(duì)C語(yǔ)言和web感興趣的同學(xué),可以詳細(xì)看下,并且試驗(yàn)一下。2021-05-05
C++語(yǔ)言實(shí)現(xiàn)hash表詳解及實(shí)例代碼
這篇文章主要介紹了C++語(yǔ)言實(shí)現(xiàn)hash表詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01

