读书笔记--模板与泛型编程

  • 了解隐式接口和编译期多态
    •   编译期多态和运行期多态
      •   运行期多态就好比是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参数的,是一个正常的变量名称。

    •   typedef:作用是用一个简短的名称替换一个较长的名称
      typedef typename std::iterator_traits<itrat>::value_type value_type;
      //在这里 typename是指定从属名称,typedef是让这个长的从属名称变为短的value_type。





  • 学会处理模板化基类内的名称
    •   可以在派生类模板中内通过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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈和递归的关系 144:Binary Tree Preorder Traversal

前序遍历&#xff1a;根左右 //用栈来实现非递归解法/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vec…

运行级别

ls -l /usr/lib/system/runlevel*target &#xff08;查看运行级别&#xff09;Linux系统有7个运行级别(runlevel)运行级别0&#xff1a;系统停机状态&#xff0c;系统默认运行级别不能设为0&#xff0c;否则不能正常启动运行级别1&#xff1a;单用户工作状态&#xff0c;roo…

微信sdk swift版_使用Swift 4的iOS版Google Maps SDK终极指南

微信sdk swift版by Dejan Atanasov通过Dejan Atanasov 使用Swift 4的iOS版Google Maps SDK终极指南 (Your ultimate guide to the Google Maps SDK on iOS, using Swift 4) Many iOS apps use Google Maps. This is a very common feature, so I have decided to prepare an u…

精确覆盖DLX算法模板

代码 struct DLX {int n,id;int L[maxn],R[maxn],U[maxn],D[maxn];int C[maxn],S[maxn],loc[maxn][2];void init(int nn0) //传列长{nnn;for(int i0;i<n;i) U[i]D[i]i,L[i]i-1,R[i]i1;L[0]n; R[n]0;idn;memset(S,0,sizeof(S));}void AddRow(int x,int col,int A[]) //传入参…

android 代码布局设置wrap_content,android ScrollView布局(wrap_content,最大大小)

我最后编写了自己的类,扩展了ScrollView既然你问……这是代码.可能不是最干净但它做我想要的.请注意,它期望在创建视图时设置layout_weight,并且不应在父LinearLayout中设置weigthSum,否则你会得到有趣的东西(因为这个的权重从原始值变为0,具体取决于大小ScrollView的内容)首先…

ABAP数据类型

数据类型表&#xff1a; 类型缩写 类型 默认长度 允许长度 初始值 描述 C 文本型 1 Space 字符串数据,如Program D 日期型 8 8 00000000 日期数据,格式为YYYYMMDD F 浮点型 8 8 0 浮点数 I 整型 4 10 0 带正负符号的整数 N 数值型 1 31 00……

cocos2d-x C++ 原始工程引擎运行机制解析

新建一个工程&#xff0c;相信感兴趣的同学都想知道cocos引擎都是如何运行的 想知道是如何运行的&#xff0c;看懂四个文件即可 话不多说&#xff0c;上代码&#xff1a; 1、首先解释 AppDelegate.h 1 #ifndef _APP_DELEGATE_H_2 #define _APP_DELEGATE_H_3 4 #include "…

web高德maker动画_Web Maker —我如何构建一个快速的离线前端游乐场

web高德maker动画by kushagra gour由kushagra gour Web Maker —我如何构建一个快速的离线前端游乐场 (Web Maker — How I built a fast, offline front-end playground) Web Maker is a Chrome extension that gives you a blazing fast and offline front-end playground —…

时间小知识对于时间转换可能有帮助

那么UTC与世界各地的时间应如何换算呢?它是将全世界分为24个时区&#xff0c;地球的东、西经各180(共360)被24个时区平分&#xff0c;每个时区各占15。以经度0(即本初子午线)为基准&#xff0c;东经730′与西经730′之间的区域为零时区&#xff1b;东经和西经的730′与2230′之…

JS——实现短信验证码的倒计时功能(没有验证码,只有倒计时)

1、功能描述 当用户想要获取验证码时&#xff0c;就点击 免费获取验证码 &#xff0c;然后开始倒计时&#xff0c;倒计时期间按钮文字为剩余时间x秒&#xff0c;且不可按状态&#xff0c;倒计时结束后&#xff0c;按钮更改为点击重新发送。 2、分析 必须用到定时器。按钮点击后…

华为OV小米鸿蒙,华为鸿蒙开源,小米OV们会采用吗?

华为曾一直声言不会进入电视市场,由此其他国产电视企业才会采用华为的可见企业是非常担忧同业竞争关系的,而在智能手机市场,华为毫无疑问与其他国产手机企业都是竞争对手,更何况就在2019年下半年和2020年上半年华为在国内手机市场的份额超过四成直逼五成,其他国产手机企业被压得…

第22天:如何使用OpenAI Gym和Universe构建AI游戏机器人

by Harini Janakiraman通过哈里尼贾纳基拉曼 第22天&#xff1a;如何使用OpenAI Gym和Universe构建AI游戏机器人 (Day 22: How to build an AI Game Bot using OpenAI Gym and Universe) Let’s face it, AI is everywhere. A face-off battle is unfolding between Elon Musk…

软件测试基础理论(总结)

1&#xff0e; 软件的三个要素&#xff1a;程序&#xff08;实行特定功能的代码&#xff09; 文档&#xff08;支持代码运行&#xff09; 数据&#xff08;支持程序运行一切有关&#xff09; 2&#xff0e; 软件的产品质量 指的是&#xff1f; 1&#xff09;质量是指实体特性…

android studio 7200u,#本站首晒# 多图杀猫 华为MateBook X上手体验

#本站首晒# 多图杀猫 华为MateBook X上手体验2017-06-09 18:45:4437点赞33收藏78评论前几天华为开了个发布会&#xff0c;带来了三款笔记本电脑&#xff0c;有幸在第一时间借到了MateBook X&#xff0c;现在就来来做一个简单的上手&#xff0c;稍晚一些再跟大家详细聊聊使用起来…

svn强制解锁的几种做法

标签&#xff1a; svn强制解锁2013-12-16 17:40 12953人阅读 评论(0) 收藏 举报分类&#xff1a;SoftwareProject&#xff08;23&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 作者&#xff1a;朱金灿 来源&#xff1a;http://blog.…

数据结构和算法练习网站_视频和练习介绍了10种常见数据结构

数据结构和算法练习网站“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” — Linus Torvalds, creator of Linux“糟糕的程序员担心代码。 好的程序员担心数据结构及其关系。” — Linux的创建者Linus Torva…

突然讨厌做前端,讨厌代码_有关互联网用户最讨厌的广告类型的新数据

突然讨厌做前端,讨厌代码You know that feeling when you’re scrolling through a blog post and then — BAM! — one of those “Sign up for our newsletter” modals pops up?当您滚动浏览博客文章&#xff0c;然后-BAM时&#xff0c;您就会知道这种感觉。 -弹出“注册我…

iOS设计模式-生成器

定义&#xff1a;将一个产品的内部表象与产品的生成过程分割开来&#xff0c;从而可以使一个建造过程生成具有不同的内部表象的产品对象。 类型&#xff1a;对象创建 类图&#xff1a; #import <Foundation/Foundation.h> interface Character : NSObject property(nonat…

《Android 应用案例开发大全(第二版)》——导读

本节书摘来自异步社区《Android 应用案例开发大全&#xff08;第二版&#xff09;》一书中的目录 &#xff0c;作者 吴亚峰 , 于复兴 , 杜化美&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 目 录 第1章 初识庐山真面目——Android简介 1.1 Android的诞生 1…

模块--sys模块

sys模块是与python解释器交互的一个接口 import sys sys.path #python解释器找模块的环境变量import sys print(sys.path)结果:[H:\\王文静\\python\\4练习\\课堂练习, H:\\王文静\\python, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\pyth…