C++模板类的用法实例
更新时间:2014年10月12日 09:44:24 投稿:shichen2014
这篇文章主要介绍了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++程序设计有所帮助。
相关文章
C++ 中 <iterator> <functional>&nbs
这篇文章主要介绍了C++ 中 <iterator> <functional> <numeric> 库好用的函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2023-11-11基于C++浮点数(float、double)类型数据比较与转换的详解
本篇文章是对C++中浮点数(float、double)类型数据比较与转换进行了详细的分析介绍,需要的朋友参考下2013-05-05C++ 使用getline()从文件中读取一行字符串方法示例
这篇文章主要介绍了C++ 使用getline()从文件中读取一行字符串方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09
最新评论