如果对于两种不同类型的数值进行比较,可能会写出以下的代码:

int compare(const string &v1, const string &v2) {
if (v1 < v2) {
return -;
}
if (v2 < v1) {
return ;
}
return ;
}
int compare(const double &v1, const double &v2) {
if (v1 < v2) {
return -;
}
if (v1 > v2) {
return ;
}
return ;
}

这两个函数除对数值比较类弄不一样外,函数体是一样的,而且重写麻烦。

这时候就需要模版了

template <typename T>
int compare(const T &v1, const T &v2) {
if (v1 < v2) {
return -;
}
if (v1 > v2) {
return ;
}
return ;
}

用一个函数体即可完成,这个就是所谓的通用函数模板。

1、定义

  模版定义以关键字template开始,后跟模板参数列表(template), 这个列表是一个逗号分隔的一个或多个模版参数的列表,用小于号<和大于号>包起来。

2、实例化

  模版定义好后,调用会实例化

cout << compare(, ) << endl;
// compare(const int &v1, const int &v2)

由于编译器遇到一个模版定义时,它并不生成代码。只有实例化出模版时一个特定的版本时,编译器才会生成代码。这一特性影响我们如何组织代码及错误何时被检测到。

C++函数模版的更多相关文章

  1. c++ 类模版、成员函数模版、函数模版 用法

    C++函数模版与类模版. template <class T> void SwapFunction(T &first, T &second){ }//函数模版 templa ...

  2. C++ Template之函数模版

    函数模版的定义: template <typename T> T const& max(const T& a,const T b) { return a > b ? ...

  3. JDBC中DAO事务函数模版

    DAO事物函数模版1: public void OrderFinsByPage(){ Connection conn = null; PreparedStatement pstmt = null; R ...

  4. C++编译器函数模版机制剖析 - 函数模版的本质

    思考:为什么函数模板能够和函数重载放在一块.C++编译器是怎样提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> u ...

  5. C++函数模版的简单使用

    模版算是C++的独有特性吧,也算是C++中比较难的地方,我平时开发的时候用的非常少,或者几乎没有用到,需要模版的地方是能看懂框架中相关的代码: 模版函数相对还是很简单的,引入模版的目的在于代码的重用: ...

  6. hdu 1286 找新朋友 欧拉函数模版题

    找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  7. C++函数模版实现

    若一个程序的功能是对某种特定的数据类型进行处理,则将所处理的数据类型说明为参数,那么就可以把这个程序改写成为模版,模版可以让程序对任何其他数据类型进行同样方式的处理. 本节主要是说一下C++的函数模版 ...

  8. C++中函数模版和普通函数的区别

    函数模版和同名普通函数在同一个作用域中,会优先调用那个函数? 函数模型在进行调用的时候会进行严格的类型匹配,而普通函数在调用的时候,会进行函数参数类型转换(前提是自动类型转换). 调用函数模版,本质是 ...

  9. 函数和函数模版在一个。cpp中的情况!(除了左移和右移,其他的不要用友元函数!!!)

    // 友元函数和运算符重载的碰撞.cpp : 定义控制台应用程序的入口点. // #include <iostream> using namespace std; template < ...

随机推荐

  1. javascript--关于错误

    错误是一定会发生,所以语言都会有自己的错误处理机制.javascript的错误处理机制,关乎throw.try.catch. try 语句允许我们定义在执行时进行错误测试的代码块. catch 语句允 ...

  2. Oracle10G 连接11G数据库,出现ORA -1017用户名/口令无效; 登录被拒绝 的问题

    一.出现症状 1.使用sqlplus连接正常 2.C#使用10g的ODP.NET连接时,报上面的错误 二.原因 1.Oracle11G之前密码是不区分大小写的,从11G开始默认密码区分大小写 2.使用 ...

  3. Fragment一些问题

    1.使用fragment静态加载,当需要替换的时候使用replace方式是无效的....... 2.replace的容器如果是线性布局,那么将会出现之前的页面残留的情况,正确做法是使用FrameLay ...

  4. javascript的replace+正则 实现ES6的字符串模版

    采用拼接字符串的形式,将 JSON 数据嵌入 HTML 中.开始时代码量较少,暂时还可以接受.但当页面结构复杂起来后,其弱点开始变得无法忍受起来: 书写不连贯.每写一个变量就要断一下,插入一个 + 和 ...

  5. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  6. css3伸缩布局属性总结

    http://www.css88.com/book/css/properties/flex/flex-basis.htm http://c7sky.com/dive-into-flexbox.html ...

  7. 8.9 CSS知识点2

    4.关系选择符 包含选择符(Descendant combinator) E F  选择所有被E元素包含的F元素 <style type="text/css"> h1 ...

  8. 给pcm格式文件加wav文件头

    #include <stdlib.h>#include <stdio.h>#include <string.h>void main(){ //wav头的结构如下所示 ...

  9. jQuery自动补全

    方法一: jquery-autocomplete配置: <script type="text/javascript" src="/js/jquery-1.4.2.m ...

  10. Diagramming for WinForms 的安装和配置

    Diagramming for WinForms 是MindFusion公司推出的商业版通用流程图控件. 运行环境: WIN7 + .Net4.0 + Visual2010 试用版控件下载地址:htt ...