读书笔记--模板与泛型编程
- 了解隐式接口和编译期多态
- 编译期多态和运行期多态
- 运行期多态就好比是virtual函数再运行的时候才确定该virtual函数该被绑定为哪个函数,运行的时候才确定函数类型。
- 编译期多态就好比是泛型编程和模板编程中,在编译的时候才确定哪个函数该被调用,根据函数的类型去确定。
- 显示接口和隐式接口
- 显示接口由函数的签名式构成
class widget{ public:widget();virtual ~widget();virtual std::size_t size() const;virtual void normalize();void swap(widget& other); }; //这个其中:上述的这些函数都构成了这个public的显示接口
- 隐式接口:由一组表达式组成;if (w.size()>10 && w!=somenastywidget)...
- 显示接口由函数的签名式构成
- classes和templates都支持接口和多态;对classes而言接口是显示的,一以函数签名为中心。多态是通过virtual函数发生在运行期;对template参数而言,接口是隐式的,基于有效表达式。多态则是通过template具现化和函数重载解析发生于编译期。
- 编译期多态和运行期多态
- typename的意义
- 在template声明式中,class和typename没有什么不同。
template <class T> class widget; template <typename T>class widget;
- 从属名称和谓非从属名称
- 从属名称(dependent typename):表示这个变量名称是依赖于template参数的,有模板参数确定的。
- 利用这个从属名称可能有时候会发生名称晦涩难懂,或者是名称过长导致名称无法解析。这个时候我们可以使用typename关键字,可以让编译器知道某个长名称是一个参数类型,这样可以消除歧义。
- 一般我们在template中指涉了一个从属类型名称,就要在它前面添加关键字typename。
- 特殊:typename不可以出现在base classes list内的从属类型名称之前,也不可在member initialization list中作为base class修饰符。
- 谓非从属名称(non-dependent typename):这个变量是不依赖与template参数的,是一个正常的变量名称。
- 从属名称(dependent typename):表示这个变量名称是依赖于template参数的,有模板参数确定的。
- typedef:作用是用一个简短的名称替换一个较长的名称
typedef typename std::iterator_traits<itrat>::value_type value_type; //在这里 typename是指定从属名称,typedef是让这个长的从属名称变为短的value_type。
- 在template声明式中,class和typename没有什么不同。
- 学会处理模板化基类内的名称
- 可以在派生类模板中内通过this->指涉base class templates内的成员名称,或者籍由一个明白写出的base class资格修饰符完成
- 将于参数无关的代码抽离templates
- templates生成多个classes和多个函数,所以任何template代码都不该与某个造成膨胀的template参数产生相依关系。
- 因非类型末班参数而造成的代码膨胀往往可以消除,做法是以函数参数或class成员变量替换template参数。
- 因类型参数而造成的代码膨胀往往可以降低,做法是让带有相同二进制表述的具现类型共享实现码。
- 运用成员函数模板接收所有兼容类型
- 成员模板函数
template <typename T> class smartptr{ public:template<typename U>smartptr(const smartptr<U> &other);//成员模板函数 };
- 请使用成员模板函数生成可以收所有兼容类型的函数;如果你声明成员模板函数用于泛化copy构造函数和泛化assignment操作,你还是需要声明正常的copy构造函数和泛化assignment操作
- 成员模板函数
转载于:https://www.cnblogs.com/Kobe10/p/5744441.html
读书笔记--模板与泛型编程相关推荐
- 读书笔记--模板(2)
模板的编译模型: 应该将类定义和函数声明放在头文件中,而普通函数和类成员函数的定义放在源文件中.要进行模板的实例化,便一起必须能访问定义模板的源代码. 1.包含编译模型 //utlities. ...
- 读书笔记--模板(3)
成员模板: 成员模板不能为虚 template<class Type> class Queue { public: template<class It> Que ...
- 读书笔记--模板(1)
函数模板时独立于子类型的函数,可作为一种方式.产生函数的特定类型版本,使用函数模板时,编译器会推断那个模板实参,一旦编译器确定了实际的模板实参,就称它实例了函数模板的一个实例. inline 说明 ...
- 《Essential C++》读书笔记 之 泛型编程风格
<Essential C++>读书笔记 之 泛型编程风格 2014-07-07 3.1 指针的算术运算(The Arithmetic of Pointer) 新需求1 新需求2 新需求3 ...
- 标准模板库之容器-《C++标准库(第二版)》读书笔记
写在前面:本文是阅读<C++标准库(第二版)>的读书笔记. 文章目录 6.1 STL组件(Component) 6.2 容器(Container) 6.2.1 序列式容器(Sequence ...
- Effective C++ 学习笔记 第七章:模板与泛型编程
第一章见 Effective C++ 学习笔记 第一章:让自己习惯 C++ 第二章见 Effective C++ 学习笔记 第二章:构造.析构.赋值运算 第三章见 Effective C++ 学习笔记 ...
- 高效能沟《关键对话》读书笔记PPT模板-优页文档
模板介绍 高效能沟<关键对话>读书笔记PPT模板-优页文档.一套,教育培训,读书笔记,幻灯片模板,内含青色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带 ...
- 《高效能人士的7个习惯》读书笔记PPT模板
模板介绍 <高效能人士的7个习惯>读书笔记PPT模板.一套读书笔记幻灯片模板,内含橙色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示:本 ...
- 《照着做,你就是最能干的人》读书笔记PPT模板
模板介绍 <照着做,你就是最能干的人>读书笔记PPT模板.一套读书笔记幻灯片模板,内含蓝色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示 ...
最新文章
- android跳转应用市场搜索,Android 应用中跳转到应用市场评分
- 中国AI创业公司霸榜NeurIPS-AutoDL竞赛,代码已开源
- boost::bind 介绍
- 转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
- 30 个 Pandas技巧,加速你的数据分析处理速度!
- (pytorch-深度学习)门控循环单元(GRU)
- 河南农大姚文与中科院北京基因组所章张课题组合作发布真核生物长链反向重复序列数据库...
- 《复联4》首轮公映票房27.5亿美金 超《阿凡达》创纪录
- 【操作系统/OS笔记18】虚拟文件系统概念
- Atitit 收入理论大总结 4位一体 4象限理论 财政收入理论 6位一体
- MvvmCross框架在XamarinForms中的使用入门
- 音频噪声抑制_音频编辑入门指南:基本噪声消除
- JSP技术:表单及 POST 方法提交参数
- 安装Office2013提示错误1706的解决方法
- httpclient实现模拟登陆126邮箱
- 树莓派linux谷歌浏览器设置,可以挂在墙上的树莓派谷歌日历,树莓谷歌
- java星星闪烁代码_css3实现星星闪烁效果
- 被老婆赶出家门,男子嚎啕大哭:击垮一个成年人,一次失业就够了
- “现在的自动驾驶太保守!”看看轻舟智航联合创始人大方这篇论文怎么说
- word如何给数学公式编号
热门文章
- play 连接mysql_Play framework 2.x 连接mysql | 学步园
- 对口高考计算机vf试题,计算机对口升学模拟答案.doc
- 【C++grammar】C++类数据成员的初始化
- mcq 队列_MCQ | 基础知识 免费和开源软件| 套装4
- MySQL的环境变量配置详细步骤
- 远控免杀专题(23)-SharpShooter免杀
- c和汇编混合编程----shellcode----弹出计算器
- C和汇编混合编程----printf
- 2016_icpc_dalian_onsite
- uva 10817——Headmaster's Headache