20、C++ 模板编程中的多态性、特性与策略类

C++ 模板编程中的多态性、特性与策略类

1. STL 与多态性

STL 通过迭代器对操作进行参数化,避免了操作定义数量的爆炸式增长。只需实现一次算法,就能用于所有容器,迭代器作为容器和算法之间的通用粘合剂,具有特定接口,这个接口被称为概念,它表示模板必须满足的一组约束。

从原理上讲,类似 STL 的功能可以通过动态多态实现,但实际上,由于迭代器概念相较于虚函数调用机制过于轻量级,添加基于虚函数的接口层可能会使操作速度大幅下降。而泛型编程依赖静态多态,在编译时解析接口,这使得它切实可行。不过,这也需要不同于面向对象设计原则的新设计原则。

在容器类型方面,模板引入 C++ 之前,多态层次结构是处理容器的流行方法,例如 NIHCL,它在很大程度上借鉴了 Smalltalk 的容器类层次结构。NIHCL 支持多种容器和迭代器,采用动态多态实现,但运行时间和内存使用成本较高,因为大多数操作需要虚调用,且内置类型需要包装在更大的多态类中。

动态多态在某些情况下是正确的选择,例如异构迭代;而许多编程任务使用模板自然且高效,例如同质容器。静态多态适用于基本计算结构,而动态多态库通常需要进行特定领域的选择。C++ 标准库的 STL 部分不包含多态容器,但有丰富的使用静态多态的容器和迭代器。

中大型 C++ 程序通常需要处理静态和动态两种多态性,有时甚至需要紧密结合它们。在很多情况下,根据讨论结果,最优设计选择是明确的,但花时间考虑长期潜在的演变通常是值得的。

2. 特性与策略类

模板使我们能够为各种类型对类和函数进行参数化,但引入过多模板参数会使客户端代码指定参数变得繁琐。幸运的是,大多数额外参数有合理的默认值,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值