C++模板类的用法实例

2025-05-27 0 13

本文实例讲述了C++模板类的用法,分享给大家供大家参考。具体方法如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94
//#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

模板类的用法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
//测试模板类

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++程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++模板类的用法实例 https://www.kuaiidc.com/76103.html

相关文章

发表评论
暂无评论