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

c++语法-模板

模板

模板是C++中一种强大的特性,允许你编写通用的代码,以便在不同数据类型上重复使用。模板分为函数模板和类模板,它们都是在编译时生成具体代码的蓝图。

函数模板

函数模板是一种定义通用函数的方式,可以在不同数据类型上使用相同的代码逻辑。函数模板使用template关键字定义,允许在函数中使用一个或多个类型参数。

语法

template <typename T>
return_type function_name(T parameter1, T parameter2, ...) {// 函数体
}
  • template <typename T>:定义了一个模板,其中T是类型参数,可以在函数内部使用。
  • return_type:函数的返回类型。
  • function_name:函数的名称。
  • T parameter1, T parameter2, ...:函数的参数列表,参数的类型是T

示例

#include <iostream>// 函数模板示例:计算两个数的最大值
template <typename T>
T max(T a, T b) {return (a > b) ? a : b;
}int main() {int x = 5, y = 10;double d1 = 3.5, d2 = 7.8;std::cout << "Max of integers: " << max(x, y) << std::endl;std::cout << "Max of doubles: " << max(d1, d2) << std::endl;return 0;
}

类模板

类模板允许你定义通用的类,其中的数据类型可以作为参数进行指定,以便创建适用于不同数据类型的对象。

语法

template <typename T>
class ClassTemplate {
public:// 类成员和方法
};
  • template <typename T>:定义了一个类模板,其中T是类型参数,可以在类内部使用。

示例

#include <iostream>// 类模板示例:实现一个通用的栈
template <typename T>
class Stack {
private:T* data;int top;int capacity;public:Stack(int size) : capacity(size), top(-1) {data = new T[capacity];}~Stack() {delete[] data;}void push(T value) {if (top < capacity - 1) {data[++top] = value;}}T pop() {if (top >= 0) {return data[top--];}return T(); // 默认构造一个T类型的对象并返回}bool isEmpty() {return top == -1;}
};int main() {Stack<int> intStack(5);Stack<double> doubleStack(3);intStack.push(10);intStack.push(20);doubleStack.push(3.14);std::cout << "Int Stack: ";while (!intStack.isEmpty()) {std::cout << intStack.pop() << " ";}std::cout << std::endl;std::cout << "Double Stack: ";while (!doubleStack.isEmpty()) {std::cout << doubleStack.pop() << " ";}std::cout << std::endl;return 0;
}

注意

模板声明和实现必须放在同一个文件中

因为c++模板的底层是占位符,编译的时候链接编入,如果放在不同文件,调用会出现找不到定义/实现的情况

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

相关文章:

  • DMNet复现(一)之数据准备篇:Density map guided object detection in aerial image
  • k8s相关命令-命名空间
  • CG Magic分享同一场景里下,VR渲染器和CR渲染器哪个好?
  • Hive工作原理
  • vue 使用this.$set设置对象属性值时,不更新试图
  • uniapp视频播放功能
  • Java面向对象七大原则以及设计模式单例模式和工厂模式简单工厂模式
  • Linux 遍历目录(cd 命令)
  • 整合Nginx实现反向代理
  • Linux:IP转INT详解
  • 43.MQ—RabbitMQ
  • Leetcode154. 寻找旋转排序数组中的最小值(存在重复元素)
  • docker查看镜像的latest对应的具体版本
  • RabbitMQ深入 —— 死信队列
  • 【React + Umi】自定义离开页面拦截弹框事件
  • S1FD40A180H-ASEMI快恢复二极管S1FD40A180H
  • 网络编程 day1
  • 《深入PostgreSQL的存储引擎:原理与性能》
  • python开发之个微群聊机器人的开发
  • 【Redis7】--4.事务、管道、发布和订阅
  • 【Vue】el 和 data短小精湛的细节!
  • 前端screenfull实现界面全屏展示功能
  • Dockerfile 制作常用命令总结
  • uniapp项目实践总结(十七)实现滚动触底加载
  • SAP入门到放弃系列之QM质量检验流程概述
  • Ansys Zemax | 光学系统设计中如何使用玻璃替换方法来优化玻璃
  • springboot基础--实现默认登录页面
  • TDesign WXS语法
  • Iterator设计模式
  • ROS 入门