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

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. devexpress中如何给TabPage控件的Tab定义背景色

    js: /*tab选项卡样式*/ .color .dxtc-link { background-color: #bf4e6a !important; } 后台代码: //选项卡样式 protected ...

  2. 路由器WDS实际案例

    背景环境: 我家在农村,由于是农村,虽然现在村里迁了网线,但是用户毕竟还是很少的,我家常年都在外面打工,就过年过节回来十几二十天,想上网,不值得迁网线,所以选择不道德的蹭网. 由于手机的信号并没有专业 ...

  3. 移动手机专题rem布局实践+主要代码

    HTML开头部分 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" / ...

  4. rtmp拉流测试工具

    http://www.cutv.com/demo/live_test.swf ================================================== ========== ...

  5. easyui datagrid 跨页选择

    $.fn.extend( memberList ,{ quickSearch : function() { var time1 = new Date(); /* this.datagrid.datag ...

  6. webForm练习1(地区导航)

    使用LINQ TO SQL类连接数据库. create database mydb go use mydb go CREATE TABLE [dbo].[ChinaStates] ( ) COLLAT ...

  7. Linux搭建smtp服务器+laravel5.2发邮件配置

    /** * 这里主要是想通过自己搭建smtp服务器,配置laravel5.2框架,实现邮箱发邮件功能, * 主要内容是搭建smtp服务器,laravel5.2发邮件顺手提一下 */ /** * 1.l ...

  8. 【转】常用css命名规则

    常用的css命名规则 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左 ...

  9. for 循环

    #include <iostream> int main(){ ; ; val <= ; ++val) { sum += val; } std::cout << &quo ...

  10. 用Javascript取float型小数点

    用Javascript取float型小数点后两位,例 var a = 12.2369826取成12.23,如何做?下面四种方法可用 (1)     var str = a.substring(0,s. ...