C++ 泛型编程-模板
一、C++模板相关
c++提供两种模板机制:函数模板和类模板
- 模板把函数或类要处理的数据类型参数化,表现为参数的多态性
- 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。
- 用模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性。
1. 函数模板
函数模板与普通函数区别:
函数模板不允许自动类型转化
普通函数能够自动进行类型转化
调用规则:
c++编译器优先考虑普通函数
可以通过空模板实参列表的语法限定编译器只能通过模板匹配
函数模板可以像普通函数那样可以被重载
如果函数模板可以产生一个更好的匹配,那么选择模板
函数模板实现机制:
编译器并不是把函数模板处理成能够处理任何类型的函数
函数模板通过具体类型产生不同的函数
编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
具体化函数模板:
第三代具体化,显示具体化的原型和定意思以template<>开头,并通过名称来指出类型
具体化优先于常规模板
template<>void mySwap(Person &p1, Person &p2){}
2. 类模板
类模板和函数模板的定义和使用类似,我们已经进行了介绍。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。
- 类模板用于实现类所需数据的类型参数化
- 类模板不能进行类型自动推导 ,函数模板可以自动类型类型推导(不能自动类型转化)
- 类模板可以做函数参数
- 类模板派生普通类
//子类实例化的时候需要具体化的父类,子类需要知道父类的具体类型是什么样的
//这样c++编译器才能知道给子类分配多少内存 - 类模板派生类模板
/继承类模板的时候,必须要确定基类的大小 - 类模板类内实现
- 类模板类外实现
- 模板分文件编译
解决方案: 类模板的声明和实现放到一个文件中,我们把这个文件命名为.hpp(这个是个约定的规则,并不是标准,必须这么写).
原因:
类模板需要二次编译,在出现模板的地方编译一次,在调用模板的地方再次编译。
C++编译规则为独立编译。
3. C++模板分文件编译问题
头文件源文件 分文件编译出错的原因分析
4. C++模板全特化和偏特化 泛型编程
全特化(特例化) 部分特例化(偏特化)
模板特例化原因: 对特定类型特定知识,提高效率
全特化条件:1 必须有一个主模板,2 然后模板类型全部实例化
函数模板只有全特化, 偏特化可以通过函数重载完成
类模板既有全特化 也有偏特化
调用顺序:全特化类 > 偏特化类 > 主模板类
二、C++11特性
类型推导 auto、decltype和decltype(auto)的用法
1.auto
//普通;类型 正常
//const类型
//引用和指针类型
2. decltype
3. delctype(auto) c++14nullptr和NULL的区别
右值引用
范围for循环
lambada表达式
列表初始化:{}内 精度降低会编译报错
并发
【智能指针】
C++ 泛型编程-模板相关推荐
- C++ Primer 学习笔记_75_模板与泛型编程 --模板定义
模板与泛型编程 --模板定义 引言: 所谓泛型程序就是以独立于不论什么特定类型的方式编写代码.使用泛型程序时,我们须要提供详细程序实例所操作的类型或值. 模板是泛型编程的基础.使用模板时能够无须了解模 ...
- C++ 泛型编程/模板 泛函编程/Lambda/λ演算
1.泛型编程(C++模板) 其中,Ada, Delpha, Java, C#, Swift 称之为 泛型/generics; ML, Scala和 Haskell 称之为 参数多态/parametri ...
- C++ 泛型编程模板 之 函数模板初步01
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;void mySwapInt(int & ...
- C++泛型编程——模板学习
模板 模板使类和函数可在编译时定义所需处理和返回的数据类型. 一个模板并非一个实实在在的类或函数,仅仅是一个类或函数的描述. 模板一般分为模板函数和类模板,以所处理的数据类型的说明作为参数的类叫类模板 ...
- 【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用
这里写目录标题 1. 简介 1.1 模板的基础理念 1.2 异常处理的基础理念 2. 模板与异常处理 2.1 异常处理在模板中的基本应用 2.1.1 为模板函数/类添加异常处理 2.1.2 使用noe ...
- c++模板---1(模板概念,利用模板实现数组排序,函数模板调用规则)
什么叫泛型编程?1. 参数类型化. 2. 模板 模板概念 c++提供了函数模板,所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表.这个通用函数就成为函数模 ...
- C++11新特性以及std::thread多线程编程
一 .C++11新特性 1. auto 类型推导 1.1 当=号右边的表达式是一个引用类型时,auto会把引用抛弃,直接推导出原始类型: 1.2 当=号右边的表达式带有const属性时,auto不会使 ...
- 《C++ Primer》读书笔记
第一章 开始 类型:程序所处理的数据都保存在变量中,而每个变量都有自己的类型 内置类型:语言自身定义的类型(而形如string等类型都是标准库定义的) main的返回值:0表示成功,非0指出错误类型 ...
- unix编程书籍推荐
[Unix下C/C++开发] unix编程书籍推荐 LiSteven 发布于 2年前,共有 0 条评论 Unix/Linux/BSD系统 相对于Windows,在UNIX下编程获得相关文档要方便很多. ...
- [Unix下C/C++开发] unix编程书籍推荐
[Unix下C/C++开发] unix编程书籍推荐 发表于1年前(2012-12-20 10:14) 阅读(256) | 评论(0) 6人收藏此文章, 我要收藏 赞0 Unix/Linux/BSD ...
最新文章
- android webview setappcacheenabled,Java WebView.setDrawingCacheEnabled方法代码示例
- QT的QActionGroup类的使用
- 原生JS封装自己的AJAX
- 吴裕雄--天生自然 高等数学学习:多元函数微分学的几何应用
- dj鲜生-26-登陆时-记住用户名的操作
- 超3千万人次观看 李佳琦助力中国青年年货节
- Confluence 6 创建一个用户宏
- 9.28 csp-s模拟测试54 x+y+z
- 谭建荣院士:制造业与互联网融合需解决三大瓶颈
- 工作总结之因为笛卡尔积问题写SQL搞了半天[害](附笛卡尔积总结)
- [转]Phoenix综述(史上最全Phoenix中文文档)
- php 方差函数,PHP应用:PHP基于方差和标准差计算学生成绩的稳定性示例
- ebx 与 ebp的作用 ---- 总线接口部件
- 如何使用 dlv 结合 Goland 进行程序 debug 调试
- 借助免费艾特二维码平台打造人气流量空间
- JAVA使用springboot整合佳博标签打印机(一)
- linux编写学生选课系统
- Win10下安装必应输入法能导致Alt+Tab切换页面时不能置于最前
- 《5G智慧钢铁白皮书》重磅发布!
- Adams 与MATLAB联合仿真 失败,adams与matlab联合仿真例子(正确没商量).doc
热门文章
- 1319 移棋子游戏(sg函数模板)
- 配置ext邮箱服务器,Extmail实现邮件服务器
- 海外直播公会Tik Tok,蓝海项目官方火热招募中
- 大学生数学竞赛辅导:Stolz定理和f(x)≡0
- 【转载】数据库建模工具
- XLua系列讲解_Helloworld
- 【Bandit Algorithms学习笔记】EXP3算法理论证明
- Source Insight 3.X 插件支持utf8,完美解决中文乱码,另附优美的配置文件一份
- 【STM32】 JR6001语音播放
- CSS - font-size 设置小字体不生效解决方案(小于12px)