我们在介绍模板之前,首先想象有这么一个场景:

  我们需要通过C++写出一个通用的加法程序,那么有如下几种方法:

  方法一:C++的函数重载

//int int int
int Add(int l,int r){
return l+r;
}
//float float float
float Add(float l,float r){
return l+r;
}
//double double double
double Add(double l,double r){
return l+r;
}
//...... /*long int int
long Add(int l,int r){
return l+r;
}
*/

  通过以上实例,我们发现用C++重载有以下缺陷:

  1.每出现一个新类型,我们都必须添加一份新代码.

  2.如果函数只是返回值的类型不同,那么函数重载就无法实现.(例如:long Add(int,int)函数与int Add(int,int)函数不能同时存在)

  3.代码复用性太低,我们发现每种加法其核心代码就基本相似,只是类型不同.

  4.假设有一个加法代码有问题,那么就得修改所有的加法代码,维护起来极其不方便.

  方法二:通过宏函数进行处理

#define ADD(l,r) ((l)+(r))

  对宏有了解的童鞋就知道,宏有以下缺点:

  1.它不是函数,而是在预处理中的一种替换,因此对于某些特殊情况,计算结果会出现问题.(例如:ADD(++i,i++))

  2.它不会进行类型检测,安全性不高.

  3.当出现编译性问题时,不容易定位.

  因此,通过以上方法我们发现:要想完美的解决这个问题,不来点新东西,是绝对不行的.所以,我们来介绍一下泛型编程:

  泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段.而模板是泛型编程的基础.

  那么模板是什么?怎么用呢?我们下篇文章介绍.

【C++】模板简述(一):模板的引入的更多相关文章

  1. 【C++】模板简述(四):模板为什么不支持分离编译?

    上文简述了类模板相关功能,本文主要简述为什么模板不支持分离编译? 在C++中,为了一个项目的规范,我们通常把代码归为三类:声明文件.实现文件.测试文件. 比如,我要用C++实现一个链表,那么就会创建这 ...

  2. 【C++】模板简述(六):总结

    1.模板技术是泛型编程的基础.([C++]模板简述(一):模板的引入) 2.模板被编译两次,因而给分离编译造成一些麻烦.([C++]模板简述(二):函数模板.[C++]模板简述(四):模板为什么不支持 ...

  3. 【C++】模板简述(三):类模板

    上文简述了C++模板中的函数模板的格式.实例.形参.重载.特化及参数推演,本文主要介绍类模板. 一.类模板格式 类模板也是C++中模板的一种,其格式如下: template<class 形参名1 ...

  4. (转)DEDECMS模板原理、模板标签学习 - .Little Hann

    本文,小瀚想和大家一起来学习一下DEDECMS中目前所使用的模板技术的原理: 什么是编译式模板.解释式模板,它们的区别是什么? 模板标签有哪些种类,它们的区别是什么,都应用在哪些场景? 学习模板的机制 ...

  5. C++ Primer 学习笔记_79_模板与泛型编程 --模板编译模型

    模板与泛型编程 --模板编译模型 引言: 当编译器看到模板定义的时候,它不马上产生代码.仅仅有在用到模板时,假设调用了函数模板或定义了模板的对象的时候,编译器才产生特定类型的模板实例. 一般而言,当调 ...

  6. C++—模板(1)模板与函数模板

    1.引入 如何编写一个通用加法函数?第一个方法是使用函数重载, 针对每个所需相同行为的不同类型重新实现这个函数.C++的这种编程机制给编程者极大的方便,不需要为功能相似.参数不同的函数选用不同的函数名 ...

  7. C++ 函数模板默认的模板参数

    函数的默认模板参数 你可以为模板参数定义默认值,它们被称作 default template arguments(默认模板参数). 它们甚至可以指向前一个模板参数. 1. 可以直接使用 operato ...

  8. [C++]模板类和模板函数

    参考: C++ 中模板使用详解 C++模板详解 概念 为了避免因重载函数定义不全面而带来的调用错误,引入了模板机制 定义 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模 ...

  9. 【模板时间】◆模板·III◆ 单调子序列

    ◆模板·III◆ 单调子序列 以前只知道DP用 O(n2) 的做法,现在才发现求单调子序列方法好多…… ◇ 模板简述 单调子序列包括 升序/降序/非升序/非降序 子序列.主要题型如下: ①在原串中找到 ...

随机推荐

  1. css的白富美

    1,CSS(Cascading Style Sheet)是用来装饰HTML的,当浏览器读到这样一个样式的时候,它就会按照这个文档进行格式化(渲染) 2,CSS的组成:选择器和声明,声明又包括属性和属性 ...

  2. H264编码器性能測试

    版本号:0.1.0-beta 作者:石硕 更新:2014-04-13 15:54:08 ======================================================== ...

  3. WdatePicker.js的使用方法(转)

    WdatePicker.js的使用方法 博客分类: 其他   1. 跨无限级框架显示 无论你把日期控件放在哪里,你都不需要担心会被外层的iframe所遮挡进而影响客户体验,因为My97日期控件是可以跨 ...

  4. I.MX6 mkuserimg.sh hacking

    /*********************************************************************** * I.MX6 mkuserimg.sh hackin ...

  5. Oracle sql执行计划解析

    Oracle sql执行计划解析 https://blog.csdn.net/xybelieve1990/article/details/50562963 Oracle优化器 Oracle的优化器共有 ...

  6. npm i macaca-android -g 无法安装成功、安装成功后运行脚本提示app-debug.apk不存在的问题

    转自https://testerhome.com/topics/8618Android 近期,macaca团队升级了macaca-android2.0.2和app-inspector1.2.28 ,导 ...

  7. bzoj1798 1

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 5866  Solved: 2079[Submit ...

  8. 04_显示意图打开activity

    实际上用显式意图打开一个activity就很简单了.只需要指定你要打开的这个activity的class就可以了. 需要注意一点的是创建了一个ThirdActivity必须要在清单文件里面声明.如果没 ...

  9. E20170518-hm

    inherit inherit  v. 继承; inheritance n. 继承; 遗传; 遗产; eigen [词典] 特征的,本征; single  n. 单程票单人房间; [复数] (高尔夫球 ...

  10. Douglas-Peucker 轨迹压缩算法

    算法的基本思路是:     对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax ,用dmax与限差D相比:     若dmax <D,这条曲线上的中间点全部舍去; ...