当前位置: 首页 > news >正文

模板初阶(1):函数模板,类模板

一、函数模板

1.1 概念

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

格式: template <typename T>template <class T>

template <class T>
void Swap(T& a, T& b)
{T tmp = a;a = b;b = tmp;
}int main()
{int a = 1, b = 2;double d1 = 1.2, d2 = 2.1;Swap(a, b);Swap(d1, d2);return 0;
}
1.2 函数模板的原理

在编译阶段,编译器需要根据传入实参的类型推演生成对应类型的函数

1.3 函数模板的实例化

用不同类型的参数使用函数模板时,称为函数模板的实例化。

1. 隐式实例化:编译器根据传入实参的类型推演生成对应类型的函数

如上:Swap()

template <class T>
T Add(const T x, const T y)
{return x + y;
}int main()
{int a1 = 1;double d1 = 2.0;// error// Add(a1, d1); // 1. Add(a1, (int)d1); 2. 显式实例化return 0;
}
2. 显式实例化:在函数名后的<>中指定函数模板的参数类型
template <class T>
T Add(const T x, const T y)
{return x + y;
}int main()
{int a1 = 1;double d1 = 2.0;Add <double>(a1, d1);// 显式实例化return 0;
}

二、类模板

2.1 类模板格式
template <class T1, class T2, ..., class Tn>
class 类模板名
{// 类成员定义
};

E.g.

template <class T1>
// typedef int STDateType    class Stack// Stack不是具体的类,是编译器根据被实例化的类型生成的具体类的模具
{
public:Stack(int capacity = 3):_top(0), _capacity(capacity){cout << "Stack(int capacity = 3)" << endl;// _a = new STDateType[capacity];_a = new T1[capacity];}~Stack(){cout << "~Stack()" << endl;delete _a;_top = _capacity = 0;}
private:// STDateType* _a;T1* _a;int _top;int _capacity;
};
http://www.lryc.cn/news/242377.html

相关文章:

  • AIGC: 关于ChatGPT中生成输出表格/表情/图片/图表这些非文本的方式
  • gen_arrow_contour_xld
  • 智能时代的智能工具(gpt)国产化助手
  • 量子计算 | 解密著名量子算法Shor算法和Grover算法
  • 缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界
  • 万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志文件配置
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • OpenGL 绘制旋转球(Qt)
  • 解决:javax.websocket.server.ServerContainer not available 报错问题
  • 81基于matlab GUI的图像处理
  • 虚拟机系列:vmware和Oracle VM VirtualBox虚拟机的区别,简述哪一个更适合我?以及相互转换
  • Go lumberjack 日志轮换和管理
  • git常用命令(git github ssh)
  • 完美解决:Nginx访问PHP出现File not found.
  • 音视频5、libavformat-2
  • python opencv -模板匹配
  • 大数据技能大赛(高职组)答案
  • C++动态规划算法:最多可以参加的会议数目
  • Windows 下安装MySQL8.0 Zip
  • 8.2 Windows驱动开发:内核解锁与强删文件
  • 【Spark源码分析】事件总线机制分析
  • c语言第七弹--扫雷小游戏!
  • 浏览器是什么
  • 一文彻底看懂Python切片,Python切片理解与操作
  • 聊聊tomcat的connection-timeout
  • HCIA-RS基础:动态路由协议基础
  • jQuery 第十一章(表单验证插件推荐)
  • SSL握手失败的解决方案
  • K8S客户端一 Rancher的安装
  • websocket与node.js实现