class template
class Template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16template<typename T>
class complex
{
public:
complex(T r=0;T i=0):re(r),im(i){}
complex& operator +=(const complex&);
T real()const{return re;}
T imag()const{return im;}
private:
T re,im;
friend complex& __doapl(complex*, const complex)
}
{
complex<double> c1(2.5,1.4);
complex<int> c2(2,6);
}函数模板
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
40template<class T> //class 可以换位typename
inline
const T& min(const T&a,const T&b){
return b<a ? b:a;
}
* 成员模板
```cpp
template <class T1,class T2>
struct pair{
...
T1 first;
T2 second;
pair():first(T1()),second(T2()){}
pair(const T1& a,const T2& b):first(a),second(b){}
template <class U1,class U2>
pair(const pair<U1,U2>& p):first(p.first),second(p.second){}
}
<!-- more -->
```cpp
template<typename T>
class complex
{
public:
complex(T r=0;T i=0):re(r),im(i){}
complex& operator +=(const complex&);
T real()const{return re;}
T imag()const{return im;}
private:
T re,im;
friend complex& __doapl(complex*, const complex)
}
{
complex<double> c1(2.5,1.4);
complex<int> c2(2,6);
}
function Template
函数模板不用指明类型
1 | template<class T> //class 可以换位typename |
成员模板
1 | template <class T1,class T2> |
例子
1 | template <typename> |
特化
1 | template <class Key> |
偏特化
个数的偏特化
1
2
3
4
5
6
7
8
9
10//从左向右特化,个数的特化,只有一个模板参数
template <typename T,typename Alloc=...>
class Vector{
}
template <typename Alloc=...>
class vector<bool,Alloc>{
}范围上的偏
1 | template <typename T> |
模板模板参数(template template parameter)
例子
1 | template<template T ,template<typename T> class Container> //template<template T ,template<class T> class Container> |
1 | template<template T ,template<typename T> class SmartPtr> //template<template T ,template<class T> class Container> |
是否是模板模板参数
1 | template <class T,class Sequence = deque<T>> |