侯捷 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; //编译器会调用下面的
相关推荐
Mr YiRan1 小时前
C++面向对象继承与操作符重载
开发语言·c++·算法
宇木灵5 小时前
考研数学-高中数学-反三角函数与特殊函数day3
笔记·考研·数学·函数
额,不知道写啥。7 小时前
HAO的线段树(中(上))
数据结构·c++·算法
LYS_06187 小时前
C++学习(5)(函数 指针 引用)
java·c++·算法
ADDDDDD_Trouvaille8 小时前
2026.2.21——OJ95-97题
c++·算法
Once_day9 小时前
C++之《程序员自我修养》读书总结(4)
c语言·c++·编译和链接
tod11310 小时前
C++核心知识点全解析(二)
开发语言·c++·面试经验
载数而行52010 小时前
算法系列2之最短路径
c语言·数据结构·c++·算法·贪心算法
消失的旧时光-194310 小时前
C++ 多线程与并发系统取向(五)—— std::atomic:原子操作与状态一致性(类比 Java Atomic)
开发语言·jvm·c++·并发
低频电磁之道11 小时前
C++中预定义宏
开发语言·c++