function template函数模版
来源:互联网 发布:中国如何注册io域名 编辑:程序博客网 时间:2024/05/01 07:25
1.模板函数为不同的模板实参定义了一个函数家族。它的表示看起来和普通的函数很相似,唯一的区别是有些函数元素是未确定的:这些参数将在使用的时候被参数化。
template <typename T>inline T const& max(T const& a,T const& b){ return a<b ? b : a; }
上述例子中的参数类型没有确定,用模板参数T来代替。
2.函数模板的实例化:使用具体的类型代替模板参数的过程。这个过程产生了一个模板的实例。这个过程是在编译的时候进行的。
模板内部的操作要被进行参数的类型所支持,否则会出错。
在编译的时候:
1)实例化前,先检查模板代码本身,查看语法错误等,如遗漏分号等;
2)在实例化期间,检查模板代码,查看是不是所有的调用都有效。如该实例化类型不支持某些函数的调用。
3.显示指定模板参数
模板参数不支持自动类型转换,每个T都必须准确的匹配。
template <typename T>inline T const7 max(T const& a, T cosnt& b);...max(4,7) //OKmax(4,4.2) //ERROR,第一个是int,第二个是double
有几种解决办法,
1)max(static_cast(double)(4),4.2) //OK2)显示指定模板参数:max<double>(4,4.2)
3)使用连个模板参数。
4.重载函数模板
和普通函数一样,模板函数同样可以被重载,相同的函数名称可以具有不同的函数定义。
几条基本的原则:
1)非模板函数和一个同名的模板函数可以同时存在。对于非模板函数和同名的函数模板,如果其他条件都相同的话,在调用的时候将调用非模板函数,不会实例化模板函数。
2)如果模板产生一个更好的匹配,选择模板参数。
3)可以显示的指定一个空的模板实例列表,告诉编译器,用模板来匹配。
4)函数的所有重载说明在该函数被调用位置之前。
我现在的感觉是这个功能少用,很容易出问题,以后就不知道了。
函数模板——模板函数(function template——template function)
函数模板的重点是模板。表示的是一个模板,专门用来生产函数。例子:
template <typename T>
void fun(T a)
{
…
}
在运用的时候,可以显式(explicitly)生产模板函数,fun <int> 、fun <double> 、fun <Shape*> ……。
也可以在使用的过程中由编译器进行模板参数推导,帮你隐式(implicitly)生成。
fun(6);//隐式生成fun <int>
fun(8.9);//隐式生成fun <double>
fun(‘a’);// 隐式生成fun <char>
Shape* ps = new Cirlcle;
fun(ps);//隐式生成fun <Shape*>
模板函数的重点是函数。表示的是由一个模板生成而来的函数。例子:
上面显式(explicitly)或者隐式(implicitly)生成的fun <int> 、fun <Shape*> ……都是模板函数。
模板本身的使用是很受限制的,一般来说,它们就只是一个产生类和函数的模子。除此之外,运用的领域非常少了,所以不可能有什么模板指针存在的,即指向模板的指针,这是因为在C++中,模板就是一个代码的代码生产工具,在最终的代码中,根本就没有模板本身存在,只有模板具现出来的具体类和具体函数的代码存在。
但是类模板(class template)还可以作为模板的模板参数(template template parameter)使用,在Andrei Alexandrescu的《Modern C++ Design》中的基于策略的设计(Policy based Design)中大量的用到。
template < typename T, template <typename U> class Y>
class Foo
{
…
};
- function template函数模版
- C++template--函数模版
- template学习之零值初始化及字符串常量作(function template argument)函数模版参数问题
- 函数模版与类模版template
- 函数模板(Function Template)
- C++函数模板(function template)
- PHPCMS模版解析之TEMPLATE函数
- Class template basic_ptree(模版类里再混有模版函数)
- 模版template
- 函数模板 Function Template(C++Primer-10)
- C++ - 函数模板(function template) 详解
- C++ - 函数模板(function template)返回值
- c++函数模板(function template)
- 一:函数模板(Function Template)
- function template
- function template
- 函数模版template学习中的一个编译问题
- Eclipse 注释 模版 template
- UVa:10324 - Zeros and Ones
- rsync服务器与客户端配置文件
- 双端队列(dequeue)链表实现
- CreateCompatibleBitmap返回NULL,GetLastError却返回0
- 新人第一篇,JAVA中获取本地tomcat路径
- function template函数模版
- VC鼠标拖动动态画矩形框
- 徐子:坐保成业,“百战百胜”(1)
- ARP:地址解析协议
- 转:ubuntu 下code blocks 安装全过程 && codeblocks 快捷键 && 解决调试终端不能粘贴问题
- 使IP最后一个点后面变成*
- Hook :VC++消息钩子编程
- winpcap 天生缺陷
- ESP定理如何判断找出OEP 【OEP脱壳的5种方法】