C++:模板进阶
目录
(图片来源网络,侵删)
1.非类型模板参数
2. 模板的特化
2.1 概念
2.2 函数模板的特化
2.3 类模板的特化
2.3.1 全特化
2.3.2 偏特化
3. 模板的分离编译
3.1 什么是分离编译
3.2 模板的分离编译
3.3 解决方法
4. 模板总结
1.非类型模板参数
- 模板参数分类:类型形参与非类型形参。
- 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。
- 非类型形参:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。
namespace bite { // 定义一个模板类型的静态数组 template class array { public: T& operator[](size_t index){return _array[index];} const T& operator[](size_t index)const{return _array[index];} size_t size()const{return _size;} bool empty()const{return 0 == _size;} private: T _array[N]; size_t _size; }; }
注意:
- 1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的。
- 2. 非类型的模板参数必须在编译期就能确认结果。
2. 模板的特化
2.1 概念
通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,比如:实现了一个专门用来进行小于比较的函数模板,当我们传入指针时,我们的目的不是比较指针的大小,而是比较指针所指向的内容。
// 函数模板 -- 参数匹配 #include using namespace std; class Date { public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } bool operator
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。