侯捷 C++ part2 兼谈对象模型笔记——4 specialization 特化

4. specialization 特化

4.1 全特化 full specialization

模板是泛化,特化是泛化的反面,可以针对不同的类型,来设计不同的东西

  • 其语法为template<> struct xxx<type>
cpp 复制代码
template<>
struct hash<char>
{
...
    size_t operator()(char& x) const {return x;}
};

template<>
struct hash<int>
{
...
	size_t operator()(int& x) const { return x; }
};
  • 这里编译器就会用 int 的那段代码;注意:hash<int>() 是创建临时变量
cpp 复制代码
cout << hash<int>()(1000)

4.2 偏特化 partial specialization

4.2.1 个数上的偏

例如:第一个模板参数我想针对 bool 特别设计

注意绑定模板参数不能跳着绑定,需要从左到右

4.2.2 范围上的偏

例如:想要当模板参数是指针时特别设计

cpp 复制代码
C<string> obj1; //编译器会调用上面的
C<string*> obj2; //编译器会调用下面的
相关推荐
四谎真好看1 分钟前
JavaWeb学习笔记(Day13)
笔记·学习·学习笔记·javaweb
MSTcheng.2 分钟前
【C++】C++11新特性(三)
开发语言·c++·c++11
田野追逐星光10 分钟前
STL容器list的模拟实现
开发语言·c++·list
StandbyTime18 分钟前
《算法笔记》学习记录-第二章 C/C++快速入门
c++·算法笔记
我在人间贩卖青春24 分钟前
C++之结构体与类
c++··结构体
rainbow688926 分钟前
C++实现JSON Web计算器
c++
C++ 老炮儿的技术栈27 分钟前
Qt Creator中不写代如何设置 QLabel的颜色
c语言·开发语言·c++·qt·算法
知无不研29 分钟前
lambda表达式的原理和由来
java·开发语言·c++·lambda表达式
承渊政道30 分钟前
Linux系统学习【Linux基础开发工具】
linux·运维·笔记·学习·centos·编辑器
艾莉丝努力练剑31 分钟前
【Linux:文件】基础IO
linux·运维·c语言·c++·人工智能·io·文件