c++之——template模板函数
为了实现与数据类型无关的编程,模板应运而生:
#include<iostream>
#include<string.h>
using namespace std; template <typename T>
void compare(T *obj1, int size)
{
int i, j;
T temp;
for(i=;i<size;i++)
for (j = i + ; j < size; j++)
{
if (obj1[i] < obj1[j])
{
temp = obj1[i];
obj1[i] = obj1[j];
obj1[j] = temp;
}
} } int main()
{
int a[] = { ,,,,, };
int size = sizeof(a) / sizeof(*a);
compare<int>(a, size);
for (int i = ; i < size; i++)
{
printf("%d ", a[i]);
} char ca[] = "abcdefg";
int csize = strlen(ca);
compare<char>(ca, csize);
printf("%s", ca);
cout << "hello...\n";
return ;
}
模板定义以关键字template开始,后跟模板参数列表,这是一个逗号分隔的一个或多个模板参数的列表,用小于号(<)和大于号(>)包围起来。当使用模板时,我们隐式或者显式地指定模板实参,将其绑定到模板参数上。(建议都显式指定)。
类型参数前必须使用class或者typename,在模板参数列表中这两个关键字含义相同,可以互换。typename更为直观,但是,typename是在模板已经广泛使用后才引入c++语言的,某些以前的程序,使用class,我们也得知道是什么意思。
模板与非模板代码不同,函数模板和类模板成员函数的定义通常放在头文件中。
当编译器遇到一个模板的定义时,并不生成代码。只有我们实例化出模板的一个特定版本时,编译器才会生成代码。当我使用(而不是定义)模板时,编译器才生成代码这一特性影响了我们如何组织代码以及错误何时被检测到。通常,编译器会在三个阶段报告错误:
1.编译模板本身时,这个阶段编译器通常不会发现很多错误。编译器可以检查语法错误,例如忘记分号或者变量名拼错等,但也就这么多了。
2.编译器遇到模板使用时,在此阶段,编译器任然没有很多可检查的。对于函数模板调用,编译器通常会检查实参数目是否正确,它还能检查参数类型是否匹配。对于类模板,编译器可以检查用户是否提供了正确数目的模板实参,但也仅限于此了。
3.模板实例化时,只有这个阶段才能发现类型相关的错误。依赖于编译器如何管理实例化,这类错误可能在链接时才报告。
保证传递给模板的实参支持模板所要求的的操作,以及这些操作再模板中能正确工作,是调用者的责任。
c++之——template模板函数的更多相关文章
- 模板函数(template function)出现编译链接错误(link error)之解析
总的结论: 将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...
- C++ template学习一(函数模板和模板函数)
函数模板和模板函数(1)函数模板函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数.函数模板的声明形式为:templat ...
- ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 177 Solved: 136[Submit][Status ...
- c++模板函数实例化的偏序机制
一:废话 今天在stackoverflow上看到一个关于c++模板specialization的问题: http://stackoverflow.com/questions/18283851/temp ...
- angularjs指令系统系列课程(2):优先级priority,模板template,模板页templateUrl
今天我们先对 priority,template,templateUrl进行学习 1.priority 可取值:int 作用:优先级 一般priority默认为0,数值越大,优先级越高.当一个dom元 ...
- C++ 模板函数与模板类
一.模板函数 函数模板提供了一类函数的抽象,即代表了一类函数.当函数模板被实例化后,它会生成具体的模板函数.例如下面便是一个函数模板:
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断
参考:http://blog.csdn.net/beyondhaven/article/details/4204345 参考:http://blog.csdn.net/joeblackzqq/arti ...
- C++:函数模板与模板函数
6.1 模板的概念 C++允许用同一个函数定义函数,这些函数的参数个数和参数类型不同.例如求最大值的max函数, int max(int x,int y) { return (x>y ...
随机推荐
- 28种CSS3炫酷载入动画特效
这是一组效果很炫酷的纯CSS3 Loading载入动画特效.这组loading动画共同拥有27种不同的效果.每一种loading动画都是通过CSS3的keyframes帧动画来完毕的,每个载入动画都构 ...
- webservice系统学习笔记7-使用handler实现过滤器/拦截器效果
handler可以作用于客户端,也可以作用了服务端 handler分为:1.LogicalHandler:只能获取到soap消息的body. 2.SOAPHandler:可以获取SOAPMessage ...
- js 面向对象式编程
1.声明一个函数,在函数内进行初始化操作,,函数不能有返回值2.把需要的参数传递进去,参数最好以对象形式传入,如果有默认的设置默认参数3.把传入的参数都保存到对象的属性上面4.把初始化操作中需要用到的 ...
- ribbon区域亲和配置一例
只需在springboot的配置文件中添加以下内容即可: eureka.instance.metadata-map.zone=left 该配置是一个eureka客户端的配置,并且该客户端使用了ribb ...
- NFS详解
00.什么是 NFS (Network FileSystem) NFS 就是 Network FileSystem 的缩写,最早之前是由 sun这家公司所发展出来的. 他最大的功能就是可以透过网络,让 ...
- Centos6.5搭建dhcpd服务
dhcpd动态获取ip地址,对于小型局域网很便利的.在不大的网络社会静态ip也是不错的! 环境 centos6.5 10.10.24.1 (dns-server) winxp sp3 (clie ...
- 初学者的React全家桶完整实例
概述 该项目还有些功能在开发过程中,如果您有什么需求,欢迎您与我联系.我希望能够通过这个项目对React初学者,或者Babel/webpack初学者都有一定的帮助.我在此再强调一下,在我写的这些文章末 ...
- 将Memcached作为服务自动启动
1.最简单的做法 通常:启动Memcache的服务器端的命令为: /usr/local/bin/memcached -d -m 256 -u root -l 127.0.0.1 -p 12000 -c ...
- eclipse里没有project facets
我下载的eclipse版本问题,导入maven工程可以显示Dynamic web Module. 新建maven工程之后,点击工程属性里没有project facets,从而没有配置Dynamic w ...
- 工作总结 ModelState.AddModelError("ShiYiObject", "对象不能为空!"); 小知识
// // 摘要: // 获取包含模型状态和模型绑定验证状态的模型状态字典对象. // // 返回结果: // 模型状态字典. public ModelStateDictionary ModelSta ...