
Code
1
//参考自:http://www.prglab.com/cms/pages/c-tutorial/advanced-concepts/templates.php
2
3
#include <iostream.h>
4
#include <stdio.h>
5
6
//没有返回值的函数模板
7
template <class T>void GetMax(T num1,T num2)
8

{
9
T rtn=(num1>num2?num1:num2);
10
cout<<rtn<<endl;
11
//printf("%d \r\n",rtn);
12
}
13
14
//有返回值的函数模板
15
template <class T>T GetMax(T num1,T num2)
16

{
17
T rtn=(num1>num2?num1:num2);
18
return rtn;
19
}
20
21
//比较两个类型的值的大小
22
template <class T,class U>void GetMax(T num1, U num2)
23

{
24
T rtn=(num1>num2?num1:num2);
25
cout<<rtn<<endl;
26
//printf("%d \r\n",rtn);
27
}
28
29
//类模板
30
template <class T>class sample
31

{
32
T vlu1,vlu2;
33
public:
34
sample(T num1,T num2)
35
{
36
vlu1=num1;
37
vlu2=num2;
38
}
39
T GetMax()
40
{
41
T rtn;
42
rtn= vlu1>vlu2? vlu1: vlu2;
43
return rtn;
44
}
45
}
46
47
//--------------------------------------------------------
48
/**//*
49
模板的特殊化是当模板中的pattern有确定的类型时,模板有一个具体的实现。例如假设我们的类模板pair 包含一个取模计算(module operation)的函数,而我们希望这个函数只有当对象中存储的数据为整型(int)的时候才能工作,其他时候,我们需要这个函数总是返回0
50
*/
51
template <class T> class pair
{
52
53
T value1, value2;
54
55
public:
56
pair (T first, T second)
{
57
value1=first;
58
value2=second;
59
}
60
T module ()
{return 0;}
61
};
62
63
template <>class pair<int>
{
64
int value1, value2;
65
public:
66
pair (int first, int second)
{
67
value1=first;
68
value2=second;
69
}
70
int module ();
71
};
72
73
template <>int pair<int>::module()
{
74
return value1%value2;
75
}
76
77
int main ()
{
78
pair<int> myints (100,75);
79
pair<float> myfloats(100.0,75.0);
80
cout<<myints.module()<< '\n';
81
cout<<myfloats.module()<< '\n';
82
return 0;
83
84
}
85
//--------------------------------------------------------
86
/**//*
87
由上面的代码可以看到,模板特殊化由以下格式定义:
88
89
template <> class class_name <type>
90
91
这个特殊化本身也是模板定义的一部分,因此,我们必须在该定义开头写template <>。而且因为它确实为一个具体类型的特殊定义,通用数据类型在这里不能够使用,所以第一对尖括号<> 内必须为空。在类名称后面,我们必须将这个特殊化中使用的具体数据类型写在尖括号<>中。
92
93
当我们特殊化模板的一个数据类型的时候,同时还必须重新定义类的所有成员的特殊化实现(如果你仔细看上面的例子,会发现我们不得不在特殊化的定义中包含它自己的构造函数 constructor,虽然它与通用模板中的构造函数是一样的)。这样做的原因就是特殊化不会继承通用模板的任何一个成员。
94
95
*/
posted on
2008-10-12 23:19
宁录
阅读(
589)
评论()
收藏
举报