Effective C++ --7 模板与泛型编程
上一篇Effective C++ -- 6 继承与面向对象设计
41、了解隐式接口和编译器多态
(1)class和template都支持接口和多态。Class支持显示接口,多态是指virtual引起的运行期多态;而template支持隐式接口和编译器多态。
(2)编译器多态是指以不同的template参数具现化function templates会导致调用不同的函数。隐式接口是指template中执行于类型对象身上的操作来决定的。
(3)显示接口由函数的签名式(函数名、参数类型、返回类型)构成,隐式接口不基于函数签名式,而是由有效表达式组成。
42、了解typename的双重含义
(1)声明template参数时,class和typename可互换。
(2)使用typename关键字标识嵌套从属类型名称。Template内体现的名称如果相依于某个template参数,称之为从属名称,如果从属名称在class内呈嵌套状,称之为嵌套从属名。但是不得在base class lists(基类列)或者member initialization list(成员初始列表)内以它作为base class修饰符。
43、学习处理模板化基类内的名称
(1)derived class template 往往拒绝调用base class template的函数,因为base class template有可能被特化,而那个特化版本可能不提供和一般性template相同的接口,因此它往往拒绝在templatized base class内寻找继承而来的名称。
(2)解决上述问题的方法:可在derived class template内通过“this->”指涉base class template内的成员名称,或籍由一个明白写出base class 资格修饰符完成(using声明式或用base::明确指出调用函数位于base class中)。
44、将与参数无关的代码抽离templates
(1)template 生成多个class和函数,所以任何template代码都不该与某个构成膨胀的template参数产生相依关系。
(2)因非类型模板参数而造成的代码膨胀,往往可以消除,做法是以函数参数或者class成员变量代替template参数。
(3)因类型而造成的代码膨胀,往往可以降低,做法是让带有完全相同二进制表述的具现类型共享实现码。
45、运用成员函数模板接受所有兼容类型
(1)真实指针支持隐式转换,derived指针可以隐式转换为base指针,但是template不同,以带有base-derived的关系的两个类型分别具化某个template,产出来的两个具现体并不带有此种关系。
(2)使用member function templates(成员函数模板)生成“可接受所有兼容类型”的函数。
(3)如果声明member template用于泛化copy构造或泛化assignment操作,还需要声明正常的copy构造函数和copy assignment操作符。
46、需要类型转换时请为模板定义非成员函数
(1)template实参推导过程中从不将隐式类型转换函数纳入考虑,这样的转换在函数调用过程中确实被使用,但是能够调用一个函数之前,首先必须知道这个函数存在,为了知道它,必须先为相关的function template推导出参数类型,然后才能将适当的函数具现化出来。然而template实参推导过程中并不考虑采纳“通过构造函数而发生的”隐式类型转换。
(2)当编写一个class template,而它所提供之“与此template相关的”函数支持“所有参数之隐式类型转换”时,将那些函数定义为“class template内部的friend函数”。原因:为了让类型转换可能发生于所有实参身上,需要non-member函数;为了令函数被自动具现化,需要将它声明在class内部;在class内部声明non-member函数的唯一方法是令它成为friend。
47、请使用traits classes表现类型信息
(1)traits classes 使得“类型相关信息”在编译期可用,它们以template和template特化完成。不要将能在编译期进行的留到运行期,选择重载而不是判断语句。
(2)整合重载技术后,traits classes有可能在编译器对类型执行if…else测试。
48、认识template元编程
(1)template metaprogramming(TMP,模板元编程)是编写template-based C++程序并执行于编译器的过程。47的trait解法就是TMP。
(2)TMP可将工作由运行期移往编译器,因而得以实现早期错误侦测和更高的执行效率。TMP同时使程序有较小的可执行文件、较短的运行期、较少的内存需求。
(3)TMP可被用来生产“基于政策选择组合”的客户制定代码,也可用于避免生成对某些特殊类型并不适合的代码。
Effective C++ --7 模板与泛型编程相关推荐
- Effective C++ 学习笔记 第七章:模板与泛型编程
第一章见 Effective C++ 学习笔记 第一章:让自己习惯 C++ 第二章见 Effective C++ 学习笔记 第二章:构造.析构.赋值运算 第三章见 Effective C++ 学习笔记 ...
- c++ swap函数头文件_C++函数模板(泛型编程)
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单 ...
- C++ Primer 学习笔记_75_模板与泛型编程 --模板定义
模板与泛型编程 --模板定义 引言: 所谓泛型程序就是以独立于不论什么特定类型的方式编写代码.使用泛型程序时,我们须要提供详细程序实例所操作的类型或值. 模板是泛型编程的基础.使用模板时能够无须了解模 ...
- c++ 函数模板_C++函数模板(泛型编程)
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单 ...
- C++ 模板与泛型编程简述
目录 1.什么是模板和泛型编程 2.定义及使用模板 1.什么是模板和泛型编程 什么是模板?什么是泛型编程?模板的概念与泛型编程是相辅相成的.想象一个场景:我们需要比较两个整数或两个字符串的大小,假如你 ...
- (十六)模板与泛型编程
(十六)模板与泛型编程 1定义模板 1.1函数模板 1.2类模板 1.2.1定义 1.2.2实例化 1.2.3类模板与友元 1.2.4类模板类型别名 1.2.5类模板静态函数 1.3模板参数 1.4成 ...
- 【effective c++读书笔记】【第7章】模板和泛型编程(3)
条款46:需要类型转换时请为模板定义非成员函数 对条款24的例子进行模板化: #include<iostream> using namespace std;template<type ...
- 《Effective C++》 总结篇(模板与泛型编程)
条款四十一:了解隐式接口的和编译期多态 和面向对象编程的显示接口和运行期多态不同, 泛型编程更多是隐式接口和编译期多态. #include <iostream> using namespa ...
- 读书笔记--模板与泛型编程
了解隐式接口和编译期多态 编译期多态和运行期多态 运行期多态就好比是virtual函数再运行的时候才确定该virtual函数该被绑定为哪个函数,运行的时候才确定函数类型. 编译期多态就好比是泛型编程和 ...
最新文章
- linux 常用find命令
- python【力扣LeetCode算法题库】35- 搜索插入位置
- linux文件物理结构,文件物理结构和存储空间管理
- Boost:简单移动平均线的测试程序
- extjs2.0 ie8 下拉树_ExtJs下拉树的实现
- cisc 和 risc_RISC和CISC | 电脑组织
- 第五章 线性回归 学习笔记下
- js中常见的数据加密与解密的方法
- (Tekla Structures二次开发)操作梁的属性对话框的宏语句
- your cuda software stack is old.we fall back to the NIVIDIA driver for some compilation. Update your
- 关于删除安装ESXI里的VIB小记。
- 发版流程及对外版本规范
- 电脑会不定时的突然黑屏加显卡风扇狂转,记录一次排查过程
- js日期计算,根据当前日期计算n个月后的日期
- 老宇哥带你玩转 ESP32:04 串口玩起来是真方便
- VBA之正则表达式(3)-- 特殊公式计算
- PDPS软件:导出AutoCAD可编辑的2D布局图
- 统计文章单词频数(C语言)
- 博文视点译者招募令!
- Element - 饿了么团队出品的神级桌面 UI 组件库
热门文章
- spark源码解析之基本概念
- mysql 压力测试之批量插入自增字段不连续问题
- Active Object 并发模式在 Java 中的应用--转载
- spring源码分析之spring-web web模块分析
- 当前工程读取配置文件示例
- myqltransactionRollbackexception deadlock found when trying to get lock
- 使用MySQL的LAST_INSERT_ID--转
- CSRF 攻击的应对之道--转
- 海象金服与沐金农签署战略合作协议,共谋消费金融发展 正文 财经网微评论(0人评论) 本文来源于东方网 2017-08-17 10:03:12 我要评论(0) share 快成为第一
- 机器学习-数据科学库(第三天)