Bre*_*212 34 c++ inheritance templates
我一直在四处寻找这一个,而这个共同的反应似乎是沿着线"他们是不相关的,而一个不能代替其他".但是你说你正在接受采访并被问到"你何时会使用模板而不是继承,反之亦然?"
Ker*_* SB 63
我看待它的方式是模板和继承是字面上的正交概念:继承是"垂直的"并且从抽象到越来越具体.形状,三角形,等边三角形.
另一方面,模板是"水平的",并定义了彼此不知道的代码的并行实例.排序整数与排序双精度和排序字符串正式相同,但这些是三个完全不同的函数.他们从远处"看起来"都一样,但他们彼此无关.
继承提供运行时抽象.模板是代码生成工具.
因为这些概念是正交的,所以它们可以愉快地一起用于实现共同目标.我最喜欢的例子是类型擦除,其中类型擦除容器包含指向实现类的虚拟基指针,但是模板派生类生成了任意多个具体实现.模板代码生成用于填充继承层次结构.魔法.
Gna*_*wme 19
"共同反应"是错误的.在"有效的C++"中,Scott Meyers在第41项中说:
第41项:理解隐式接口和编译时多态.
迈耶斯继续总结:
- 类和模板都支持接口和多态.
- 对于类,接口是显式的并且以函数签名为中心.多态性在运行时通过虚函数发生.
- 对于模板参数,接口是隐式的并且基于有效表达式.通过模板实例化和函数重载分辨率在编译期间发生多态性.
当您想要保留类型安全或想要避免虚拟调度时,请在基础(或组合)中使用模板。
| 归档时间: |
|
| 查看次数: |
24563 次 |
| 最近记录: |