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

14、C++中代码重用

1、C++模板的主要作用是允许编写通用代码,即能够在不同数据类型或数据结构上工作而无需重复编写代码。通过模板,可以实现代码的复用性和灵活性,从而提高开发效率和程序的可维护性。

typename关键字:

在C++中,typename关键字用于声明一个模板参数,它可以是任何类型,包括基本数据类型(如 intfloat)、用户自定义类型(如类、结构体)或其他模板类型。typename指定了模板参数的类型,这样在实例化模板时,可以传递任何符合该类型的参数。

template <typename T1, typename T2>
uint64_t Math_Add(T1 signedNum, T2 signedNum1)

typename的作用是声明模板参数T1T2。这意味着Math_Add函数是一个模板函数,它接受两个参数signedNumsignedNum1,这两个参数的类型分别是T1T2。在实例化这个模板函数时,你可以传递任何类型给T1T2,只要这两个类型可以进行加法运算,并且结果可以被安全地转换为uint64_t类型。

例如,你可以这样使用这个模板函数:

Math_Add<int, int>(1, 2);  // 实例化模板,T1=int, T2=int
Math_Add<float, double>(1.0f, 2.0);  // 实例化模板,T1=float, T2=double

在这个例子中,typename关键字用于定义模板参数,使得Math_Add函数成为一个类型安全的函数,它可以在不同的数据类型上进行加法运算,而不需要为每一种类型重复编写代码。

类模板:

当我们定义一个类模板时,我们可以使用一个或多个类型参数来表示任意数据类型。通过类模板,我们可以实现通用的类,适用于多种不同的数据类型。以下是一个简单的示例,演示如何定义和使用一个类模板:

#include <iostream>// 定义一个类模板
template <class T>
class Pair {
public:Pair(T first, T second) : first(first), second(second) {}T getFirst() { return first; }T getSecond() { return second; }private:T first;T second;
};int main() {// 实例化一个Pair类模板,存储整数Pair<int> intPair(10, 20);std::cout << "First: " << intPair.getFirst() << ", Second: " << intPair.getSecond() << std::endl;// 实例化一个Pair类模板,存储浮点数Pair<double> doublePair(3.14, 2.718);std::cout << "First: " << doublePair.getFirst() << ", Second: " << doublePair.getSecond() << std::endl;return 0;
}

在这个示例中,Pair 是一个类模板,使用模板参数 T 表示任意数据类型。通过实例化 Pair<int> 和 Pair<double>,我们可以分别创建存储整数和浮点数的实例,并使用相同的类模板代码。这样就实现了通用的类模板,可以适用于不同的数据类型。

http://www.lryc.cn/news/371971.html

相关文章:

  • 剖析框架代码结构的系统方法(下)
  • C语言学习笔记之结构体(一)
  • MATLAB入门知识
  • 计算机网络(5) ARP协议
  • 美团的 AI 面试有点简单
  • 编程软件怎么给机器人编程:深入探索编程与机器人技术的融合
  • unity2d Ugui--Image城市道路汽车行驶
  • 【深度学习】【Prompt】使用GPT的一些提示词
  • 如何在centos中和windows server中找到挖矿木马和消灭挖矿木马
  • Slice用法举例Python
  • 响应式网页开发方法与实践
  • feedparser - Python 解析Atom和RSSfeed
  • ARM32开发--IIC时钟案例
  • [深度学习]基于C++和onnxruntime部署yolov10的onnx模型
  • Spring-事件
  • delmia的工序设置
  • 【JavaEE精炼宝库】多线程(5)单例模式 | 指令重排序 | 阻塞队列
  • [图解]《分析模式》漫谈03-Party是什么
  • 【Numpy】一文向您详细介绍 np.abs()
  • 【AI绘画】Stable Diffusion 3开源
  • 使用ant-design/cssinjs向plasmo浏览器插件的内容脚本content中注入antd的ui组件样式
  • 南京威雅学校:初中转轨国际化教育,她们打开了成长的另一种可能
  • Linux | 标准IO编程
  • 从ES的JVM配置起步思考JVM常见参数优化
  • milvus的GPU索引
  • CleanMyMac2024最新免费电脑Mac系统优化工具
  • catia/delmia的快捷图标模式最多12个
  • 磁盘性能概述与磁盘调度算法
  • chrome浏览器设置--disable-web-security解决跨域
  • Android中蓝牙设备的状态值管理