C++模板详细整理2
来源:互联网 发布:php有线程吗? 编辑:程序博客网 时间:2024/05/29 14:13
1 模板参数
和函数参数一样,模板参数名字程序员自己定义。通常将类型参数命名为 T 。但实际上我们可以使用任何名字。
template <typename FOO> FOO calc (const FOO& a,const FOO& b){ FOO tmp = a;//tmp的类型与参数和返回类型一样 return 0;}
1.1**模板参数与作用域**
和普通函数一样,模板参数名作用范围是在其声明之后,直到模板声明或定义结束之前。模板内不能重用模板参数名。
1.2**模板声明**
模板声明必须包含模板参数
template <typename T>int compare(const T&, const T&);template <typename T> class Blob;
与函数参数相同,声明中的模板参数的名字不必与定义中的相同。
1.3使用类的类型成员
我们用作用域:: 来访问static成员和类型成员,在普通非模板代码中,编译器直到类的定义。因此,他知道通过作用域运算符访问的名字是类型还是static成员。
但对于模板就麻烦了。假设T是一个模板类型参数,当编译器遇到类似 T::Compare这样的代码时候,他不知道compare是一个类型成员还是一个static数据成员,直到实例化才知道。
因此,我们必须显式告诉编译器该名字是一个类型。我们通过关键字typename来实现这一点。
template <typename T>typename T::value_type top(const T& c){ if(!c.empty()) return 0; else { return typename T::value_type(); }}
1.4 默认模板实参
就像我们为函数参数提供默认实参一样,我们也可以提供默认模板实参,在新标准里,我们可以为函数和类模板提供默认实参。
template <typename T,typename F = less<T> >int compare(const T &v1, const T &v2,F f = F()){ if(f(v1,v2)) return -1; if(f(v2,v1)) return 1 return 0;}
在这段代码中,我们为模板添加了第二个类型参数,名为F,表示可调用对象的类型。并定义了一个新的函数参数f,绑定到一个可调用对象上。
1.5 成员模板
一个类,可以包含本身是模板的成员函数,这个成员被称为成员模板,当然,成员模板不能是虚函数。
普通类的成员模板
阅读全文
0 0
- C++模板详细整理2
- C++模板详细整理
- C / C++ 文件文件夹操作详细整理
- [模板]详细设计说明书(整理版)【申明:来源于网络】
- 模板引擎FreeMarker【整理2】
- 模板整理
- 模板整理---大数模板
- C语言整理-2
- 史上最详细的struts 2 标签整理
- 史上最详细的struts 2 标签整理
- 史上最详细的struts 2 标签整理
- STC89C52单片机定时器2详细整理
- C和指针整理 2
- C语言程序设计整理(2)
- VS2012(C++)笔记整理2
- C/C++_log2000_函数模板与类模板笔记2
- C++template 模板类2
- 【整理】Eclipse注释模板
- 网络缓存
- J2EE系列之MyBatis学习笔记(十二)-- 使用注解配置sql映射器
- online的操作介绍
- 2017年成为全栈开发工程师的权威指南
- 关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享
- C++模板详细整理2
- const在函数和方法上的防修改作用
- 【mysql】mysql获取两个集合的交集/差集/并集
- C#链接操作Access数据库
- FFMpeg所有命令行参数
- [RK3288][Android6.0] 调试笔记 --- 修改浏览器默认地址
- 5分钟弄懂Docker!
- Android应用坐标系统全面详解
- AppDelegate 内的方法在APP生命周期触发的时机和顺序