侯捷 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; //编译器会调用下面的
相关推荐
无限进步_17 分钟前
C语言字符串连接实现详解:掌握自定义strcat函数
c语言·开发语言·c++·后端·算法·visual studio
oscar99917 分钟前
CSP-J教程——第一阶段——第二课:变量与数据类型
c++·数据类型·csp-j
弈风千秋万古愁35 分钟前
【PID】连续PID和数字PID chapter1(补充) 学习笔记
笔记·学习·算法·matlab
qwepoilkjasd39 分钟前
RapidJSON 完整学习指南
c++
一朵筋斗云40 分钟前
c++
c++
有趣的我1 小时前
关于stub和mock
c++
im_AMBER2 小时前
JavaScript 03 【基础语法学习】
javascript·笔记·学习
Yupureki2 小时前
从零开始的C++学习生活 18:C语言复习课(期末速通)
c语言·数据结构·c++·学习·visual studio
永远有缘2 小时前
四种编程语言常用函数对比表
java·开发语言·c++·python
C++_girl2 小时前
c++、java/python语言有什么区别?为什么c++更快?
java·开发语言·c++