模板

一、类型参数与模板

1、支持更多类型的冒泡排序函数:引入模板,将类型参数化。
2、模板的实例化与对象实例化。
模板实例化为类--编译期间完成。
类实例化为对象--运行期间完成。
int a = 128, b = 256;
Buffer<double, char, a, b> buf3; // 模板实参不能包含变量、函数调用、变量表达式等运行时对象

二、类模板、函数模板与模板特化

三、模板及其特化语法
1、类模板及其特化语法
1)通用语法
template<class 类型形参1, class 类型形参2,...> class 类模板名{...};
如:template<class T> class comparator{...};

如果在类模板外部定义成员函数:
template<class 类型形参1, class 类型形参2,...> 返回类型 类模板名<类型形参1, 类型形参2,...>::成员函数名(形参表){...}
如:template<class T> int comparator<T>::compare(void){...}

2)特化语法
template<> class 类模板名<类型形参1, 类型形参2,...>{...};
如:template<> class comparator<const char*>{...};

如果只针对类模板中某个成员函数进行特化:
template<> 返回类型 类模板名<类型形参1, 类型形参2,...>::成员函数名(形参表){...}
如:template<> int comparator<const char*>::compare(const char*, const char*){...}

2、函数模板及其特化语法
1)通用语法
template<class 类型形参1, class 类型形参2,...> 返回类型 函数模板名(形参表){...}如:template<class T> int compare (T x, T y) {...}

2)特化语法
template<> 返回类型 函数模板名<类型形参1, 类型形参2,...>(形参表){...}如:template<> int compare (const char* x, const char* y) {...}


四、局部特化与最优匹配

1、编译器优先选择特化程度最高的版本。
template <class T1, class T2> class Pair {...};
template <class T1> class Pair<T1,int> {...};
template <> class Pair<int, int> {...};

2、编译器优先选择针对指针的特化版本
a)template<class T> class Feeb {...};
b)template<class T*> class Feeb {...};
Feeb<char> f1;//a)
Feeb<char*> f2;//b),T->char

3、编译器优先选择参数匹配程度最好的特化版本。
a)template <class T1, class T2, class T3> class Trio{...};
a)template <class T2, class T2> class<T1, T2, T2> Trio{...};
a)template <class T1> class<T1, T1*, T1*> Trio{...};
Trio<int, short, char*> t1;//a
Trio<int, short, short> t2;//b
Trio<char, char*, char*> t3;//c


五、非类型参数与缺省参数
template<class T1, class T2 = double, int Size1 = 128, int Size2 = 256> class Buffer{...
private:
    T1 m_t1[size1];
    T2 m_t2[size2];
};
Buffer <string, double, 128, 256> buf1;
Buffer <string> buf2;
Buffer <string, int> buf3;
模板参数可以带缺省值,但是与函数的缺省参数一样,必须靠右。


六、与模板相关的相关问题

1、从模板继承:ti.cpp
2、模板型成员变量、模板型成员函数、模板型成员类型:tm.cpp
3、模板的递归实例化:tr.cpp
template<class T1, int size> class B {};
  B<B<int, 4>, 3> b;
4、模版型类型参数:tp.cpp
template<class T1> class A {};
template<template<class T1>class T2> class B {};
B<A> b;


七、链表模板

1、链表模板
2、容器
3、迭代器(iterator)。容器模板的内置类型支持如下操作:
1)++ :迭代
2)*  :解引用
3)-> :访问成员
4)!=  :

正向迭代器(iterator)、常正向迭代器(const_titerator)、反向迭代器(reverse_iterator)、常反向迭代器(const_reverse_iterator)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值