c++,模板函数的定义和使用【初探】
// demo.cpp :
// 模版函数的定义和使用:
// 1.模板支持返回参数类型为模板参数。
// template <typename RET_T , typename IN1_T , typename IN2_T >
// RET_T prifunc2(IN1_T in1 , IN2_T in2) { ... }
// 2.因为在函数调用时无法直接推断返回类型,所以可以显示的提供模板实参。prifunc2<double, int ,int>
// 3.模板声明时RET_T放到第一位,使用时可以只提供返回值类型,而剩余的参数则按常规方式利用形参进行推断。prifunc2<double> #include<iostream>
using namespace std; template <typename RET_T , typename IN1_T , typename IN2_T >
RET_T prifunc2(IN1_T in1 , IN2_T in2)
{
RET_T ret;
ret = in1 +in2;
cout<<"in1 = "<<in1<<endl;
cout<<"in2 = "<<in2<<endl;
ret = in1+in2 ;
cout<<"ret = "<<ret<<endl;
return ret;
} int main()
{
int v = prifunc2<double, int ,int>(,);//返回值放在第一位。
int vv = prifunc2<double>(,);//可以只提供返回值的声明,其他会自行推断出来。
while();
return ;
}
//测试结果:
// in1 = 11
// in2 = 22
// ret = 33
// in1 = 33
// in2 = 44
// ret = 77
template <class RET, class T, class V, class X>
RET func(T t, V v, X x, int i)
{
RET ret;
cout<<"value="<<t<<endl;
cout<<"value="<<v<<endl;
cout<<"value="<<x<<endl;
cout<<"value="<<i<<endl; ret = t;
return ret;
} void f2(void)
{
int i = ;
char c = ;
float f = 9.01; char* str = "hello";
char cstr[] = "haha"; char* p1 = func<char *>(str,c,f,i);
char* p2 = func<char *>(str,cstr,c,i); cout<<"p1:"<<p1<<endl;
cout<<"p2:"<<p2<<endl; /*
value=hello
value='
value=9.01
value=11
value=hello
value=haha
value='
value=11
p1:hello
p2:hello
请按任意键继续. . .
*/
}
c++,模板函数的定义和使用【初探】的更多相关文章
- c++模板函数声明定义分离编译错误详解
今天看到accelerated c++上有个简单的vector容器的实现Vec,就再vs2008上编译了下: ///// Vec.h #ifndef GUARD_VEC_H #define GUARD ...
- 模板函数(template function)出现编译链接错误(link error)之解析
总的结论: 将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...
- [转]C++函数模板与模板函数
1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. ...
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- c++函数模板声明与定义相分离
最近在仿写stl,发现stl源码中将模板的声明与定义写在一起实在很不优雅.自己尝试用“传统”方法,及在.h文件里声明,在.cpp文件里定义,然后在main函数里包含.h头文件,这样会报链接错误.这是因 ...
- C++: 模板函数定义与声明分离;
我们知道模板函数或模板类的定义一般都是和声明一起在头文件中,但是这样的话, 就暴露了内部实现,有什么办法能够将定义和声明进行分离呢? 答案是: 有的: 头文件: test.h; class test ...
- 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 ...
- 为什么模板函数的声明和实现都放在.h文件中
当你不使用这个模板函数或模板类,编译器并不实例化它,当你使用时,编译器需要实例化它,因为编译器是一次只能处理一个编译单元,也就是一次处理一个cpp文件,所以实例化时需要看到该模板的完整定义.所以都放在 ...
随机推荐
- ubuntu下使用codeblocks
集成开发环境搭建 1. 安装build-essential 方法: sudo apt-get install build-essential 作用:提供编译程序必须软件包的列表信息,编译程序有了这个软 ...
- 关于yield创建协程的理解
先上利于理解的代码: #coding:utf-8 def consumer(): c_r = '' while 1: m = yield c_r if not m: return print(&quo ...
- Protel99SE制作拼板的方法
制作步骤: 1.在PCB编辑里按快捷键 S/A全选复制源PCB全部内容,再按Ctrl+C看到十字光标.点击左键. 2.打开目标PCB文件,点击Edit菜单,在下拉菜单中点击Paste special( ...
- 什么是PCB改板及PCB改板应注意的问题
PCB改板是指在保持原有功能一致的前提下,对原有产品设计及电路板布局走线设计的基础上进行整改设计,调整板上器件布局与线路走向,实现电子产品重新设计研发,同时又可以规避知识产权等纠纷,加快新产品研发速度 ...
- 非常可乐(bfs)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Silverlight CheckBoxList
项目要用到复选框,可是在Silverlight中不存在CheckBoxList.通过查阅资料以及依据自己的理解,写了简单演示样例: 1.XAML <UserControl x:Class=&qu ...
- 利用Linux命令行进行文本按行去重并按重复次数排序
最近杂事太多,正事进展缓慢.Fighting! linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linux命令行进行文本按行去重并按重 ...
- DevExpress ASP.NET 使用经验谈(2)-XPO对象的使用(使用默认数据连接)
接下来,我们通过一个控制台应用程序,介绍XPO对象的保存操作. 图一 添加新项目 图二 选择项目类型为控制台应用程序 查看生成的Program.cs代码文件,代码如下: using System; u ...
- NGUI 按钮音效问题
昨天给NGUI的按钮添加音效时,刚开始是自己新建空对象绑定声音的,后来发现NGUI按钮携带button sound组件,直接将音效拖入即可,不用写一行代码,非常简单.但是后来发现添加相同的音效有的按钮 ...
- Node.js学习笔记3(快速入门)
一.开始使用Node.js编程 1.hello world 好了,让我们开始实现第一个 Node.js 程序吧.打开你常用的文本编辑器,在其中输入 ...