C++函数模版
如果对于两种不同类型的数值进行比较,可能会写出以下的代码:
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++函数模版的更多相关文章
- c++ 类模版、成员函数模版、函数模版 用法
C++函数模版与类模版. template <class T> void SwapFunction(T &first, T &second){ }//函数模版 templa ...
- C++ Template之函数模版
函数模版的定义: template <typename T> T const& max(const T& a,const T b) { return a > b ? ...
- JDBC中DAO事务函数模版
DAO事物函数模版1: public void OrderFinsByPage(){ Connection conn = null; PreparedStatement pstmt = null; R ...
- C++编译器函数模版机制剖析 - 函数模版的本质
思考:为什么函数模板能够和函数重载放在一块.C++编译器是怎样提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> u ...
- C++函数模版的简单使用
模版算是C++的独有特性吧,也算是C++中比较难的地方,我平时开发的时候用的非常少,或者几乎没有用到,需要模版的地方是能看懂框架中相关的代码: 模版函数相对还是很简单的,引入模版的目的在于代码的重用: ...
- hdu 1286 找新朋友 欧拉函数模版题
找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ...
- C++函数模版实现
若一个程序的功能是对某种特定的数据类型进行处理,则将所处理的数据类型说明为参数,那么就可以把这个程序改写成为模版,模版可以让程序对任何其他数据类型进行同样方式的处理. 本节主要是说一下C++的函数模版 ...
- C++中函数模版和普通函数的区别
函数模版和同名普通函数在同一个作用域中,会优先调用那个函数? 函数模型在进行调用的时候会进行严格的类型匹配,而普通函数在调用的时候,会进行函数参数类型转换(前提是自动类型转换). 调用函数模版,本质是 ...
- 函数和函数模版在一个。cpp中的情况!(除了左移和右移,其他的不要用友元函数!!!)
// 友元函数和运算符重载的碰撞.cpp : 定义控制台应用程序的入口点. // #include <iostream> using namespace std; template < ...
随机推荐
- 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...
- adb命令安装apk,和安装问题daemon not running. starting it now on port 5037解决
通过手机测试手机上的客户端应用,一般需要先安装被测应用apk到手机中,安装步骤如下: [预置条件] 1.通过PC的"开始",在运行框中输入cmd,回车,打开cmd编辑界面: 2.手 ...
- oracle查看所有表的数据量并排序
源地址:http://blog.csdn.net/zhanggnol/article/details/6683697 select t.table_name,t.num_rows from user_ ...
- INI 文件的读写操作
在C#中对INI文件进行读写操作,在此要引入using System.Runtime.InteropServices; 命名空间,具体方法如下: #region 变量 private static r ...
- 在本地主机上powershell中连接远程主机执行vbs脚本,得到执行结果(2008版及以上)
在桌面版的主机上远程管理服务器版主机,在本地powershell中连接远程主机执行vbs脚本,得到执行结果. 执行步骤: 1.将本地主机上的Hyper.vbs复制到远程连接主机上.例如,本地vbs脚本 ...
- [转载]:fortran之format格式化输出总结
先贴一段别人总结好的: 格式化输出的控制字符非常的丰富,但常用的并不多,一般说来:" I .F.E.A.X "是最常使用的几个格式,最 好把它们都记下来. Iw[.m] 以w个字符 ...
- 使用imap协议接收邮件
之前一直使用PHPMail类进行发送邮件,这个是一个非常强大的类,但是其实底层就是使用mail()函数来进行发送的. 但是现在公司有个需求是 写个程序需要实时的接收邮件,主要是判断邮件发出去了,并且 ...
- Docker上运行dotnet core
下载microsoft/dotnet镜像 运行命令: docker pull microsoft/dotnet 如果没有使用阿里镜像加速的,参照这篇先配置好再跑上面命令: http://www.cnb ...
- eclipse javascript验证报错
项目右键->properties
- switch(面试)
public static void Output() { ; ) { i--; switch (i) { : Console.WriteLine(i.ToString()); break; : Co ...