STL(5) 必要基础:操作符重载和模板

发布时间 2023-09-06 00:06:49作者: LiviaYu

操作符重载 operator overloaded

四个不能重载的操作符

  1. ::域
  2. . 成员获取
  3. .*
  4. ?:判断语句

基本语法

下图说明了对于不同数量的变量如何去重载

模板

类模板

模板的简单应用,设计的时候将类型保留,暂定为T,将内部所有需要类型的地方都改为T
这样就形成了一个模板类/类模板

使用时,需要用尖括号告诉编译器所指定T的类型

函数模板

使用时不需要指定类型,由编译器自动推导,在调用的时候,T就是stone,会查找stone中的操作符重载进行调用

为什么函数不需要指定

编译器没有线索,不知道类的类型

成员模板

有这个东西,暂时不讲

泛化和特化(全特化)

已经有了泛化的类型
但是,对于某些类型,我希望对这个类型有更好的做法,这就是泛化和特化的思想,实现方法就是traits

最上面的是泛化
但是如果是int类型或是double类型,就用了特化的形式

hash中的特化

偏特化 Partial specialization

两个模板参数,绑定了一个,那么就是偏的特化

本来指定了两个模板参数,现在将第一个绑定为bool,第二个仍是泛化类型,
就是一种偏特化

第一个是泛化版本
如果类是一个指针,那么就有一个特化版本