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文件,所以实例化时需要看到该模板的完整定义.所以都放在 ...
随机推荐
- Linux学习之Shell编程基础
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
- Hibernate学习之映射关系
一.Hibernate多对一关联映射:就是在“多”的一端加外键,指向“一”的一端. 比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系. 1.“多”端实体加入引用“一”端实体的变量及g ...
- Dojo实现Tabs页报错(二)
- jbpmAPI-5
Part II. jBPM Core 5.1.概述本章介绍了API需要加载过程和执行它们.更多的细节如何定义过程本身,看看在BPMN 2.0章.与流程引擎交互(例如,开始一个过程),你需要建立一个会话 ...
- Linq 入门 顺带 Func与Action
Linq的优点: 查询是一种从数据源检索数据的表达式. 查询通常用专门的查询语言来表示. 随着时间的推移,人们已经为各种数据源开发了不同的语言:例如,用于关系数据库的 SQL 和用于 XML 的 XQ ...
- python re(正则模块)
参考文档:http://blog.csdn.net/wusuopubupt/article/details/29379367 ipython环境中,输入"?re",官方解释如下: ...
- PhoneGap笔记-01 基本使用
1. 环境配置 1.1 常用框架 jQuery Backbone.js dojo bootstrap kendo UI Sencha jQuery Mobile PhoneJS AngularJS I ...
- IOS FoundationKit (NSString) 知识汇总
1. interface 代表类声明,@implement 代表类实现,@encode 代表将object-c 中类型转换成指定字符串 2 当前char * 类型转化为字符串需要转化为NSStrin ...
- Liunx 环境下vsftpd的三种实现方法(超详细参数)
以下文章介绍Liunx 环境下vsftpd的三种实现方法 ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz,目前已经到2.0.3版本.假 ...
- makinacorpus/spynner
makinacorpus/spynner Intro Contents Intro Credits Companies Authors Contributors Dependencies Feedba ...