C++ STL一一认识模板Template
来源:互联网 发布:免费推广网络兼职平台 编辑:程序博客网 时间:2024/05/19 13:44
C++模板Template
通常有两种:函数模板、类模板
一、函数模板:针对仅参数类型不同的函数
函数模板格式:
template <class 形参名,class 形参名,......> 返回类型 函数名(参数列表){ 函数体}一般形式如下示例所示:
template <class T> void swap(T& a, T& b){}
二、类模板:针对仅数据类型和成员函数类型不同的类
template<class 形参名,class 形参名,…> class 类名{ ... };形式示例如下:
template<class T> class A{ public: T a; T b; T hy(T c, T &d);};
template<模板形参列表> 函数返回类型 类名<模板形参名>::函数名(参数列表){函数体},
比如有两个模板形参T1,T2的类A中含有一个void h()函数,则定义该函数的语法为:
template<class T1,class T2> void A<T1,T2>::h(){}
当在类外面定义类的成员时template后面的模板形参应与要定义的类的模板形参一致。
注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。
三、模板的形参:类型形参,非类型形参、模板形参1.类型形参:由关键字class或typename后接说明符构成。
如:
template<class T> void h(T a){}其中T就是一个类型形参。
用法注意:
针对函数模板,不能为同一个模板类型形参指定两种不同的类型,例如:
template<class T>void h(T a, T b){} //语句调用h(2, 3.2)将出错针对类模板,当我们声明类对象为:
A<int> a,比如template<class T>T g(T a, T b){} //语句调用a.g(2, 3.2)在编译时不会出错,但会有警告示例:
//TemplateDemo.h#ifndef _TEMPLATE_DEMO_H_#define _TEMPLATE_DEMO_H_template<class T> class A{public:T g(T a,T b);A();};#endif
//TemplateDemo.cpp#include<iostream>#include <string>#include "TemplateDemo.h"template<class T> A<T>::A(){}//template<模板形参列表> 函数返回类型 类名<模板形参名>::函数名(参数列表){函数体}template<class T> T A<T>::g(T a,T b){return a+b;}void main(){A<int> a;std::cout<<a.g(2,3.2)<<std::endl;}
2.非类型形参
由于涉及到的知识点比较多,详细说明可以参考如下作者链接,感谢原创者知识分享与总结
http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html
http://www.cnblogs.com/gw811/archive/2012/10/25/2736224.html
阅读全文
0 0
- C++ STL一一认识模板Template
- C++,VC++,MFC,STL(standard template library,标准模板库)
- C++template ;模板学习
- C++template模板
- C++STL粗浅认识
- 标准模板库STL(Standard Template Library)
- C/C++函数模板template
- C++template 模板类2
- C++,template,类模板和函数模板
- 写模板string类, 认识STL的模块分离策略----小话c++(7)
- C++ STL一一vector
- C++ STL一一deque
- C++ STL一一list
- C++ STL一一迭代器
- C++ STL一一迭代器配接器
- stl template
- STL (Standard Template Library)标准模板库 C++
- 什么是STL(Standard Template Library,标准模板库)
- 关于QT5下代码中文字符编译不通过的问题
- 如何将数据上传到onenet服务器
- tab选卡的多种实现方式
- 2. Add Two Numbers
- Linux下GDB调试简单示例
- C++ STL一一认识模板Template
- 什么是懒加载和预加载
- 机器学习 梯度下降法总结
- Python学习笔记
- 二分与快排结合
- 麻将服务器搭建,基于客户端cocos2d,后端nodejs实现(折腾着玩)
- cookie&session
- 加密解密及安全网络通信模型
- 组建一台计算机4_硬件4 单位存储器