STL(5) 必要基础:操作符重载和模板
目录
- 操作符重载 operator overloaded
- 四个不能重载的操作符
- 基本语法
- 模板
- 类模板
- 函数模板
- 为什么函数不需要指定
- 成员模板
- 泛化和特化(全特化)
- 偏特化 Partial specialization
操作符重载 operator overloaded
四个不能重载的操作符
- ::域
- . 成员获取
- .*
- ?:判断语句
基本语法
下图说明了对于不同数量的变量如何去重载
模板
类模板
模板的简单应用,设计的时候将类型保留,暂定为T,将内部所有需要类型的地方都改为T
这样就形成了一个模板类/类模板
使用时,需要用尖括号告诉编译器所指定T的类型
函数模板
使用时不需要指定类型,由编译器自动推导,在调用的时候,T就是stone,会查找stone中的操作符重载进行调用
为什么函数不需要指定
编译器没有线索,不知道类的类型
成员模板
有这个东西,暂时不讲
泛化和特化(全特化)
已经有了泛化的类型
但是,对于某些类型,我希望对这个类型有更好的做法,这就是泛化和特化的思想,实现方法就是traits
最上面的是泛化
但是如果是int类型或是double类型,就用了特化的形式
hash中的特化
偏特化 Partial specialization
两个模板参数,绑定了一个,那么就是偏的特化
本来指定了两个模板参数,现在将第一个绑定为bool,第二个仍是泛化类型,
就是一种偏特化
第一个是泛化版本
如果类是一个指针,那么就有一个特化版本