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

【C++】掌握类模板:多参数实战技巧

1. 类模板

1.1 类模板的定义格式

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

多参数类模板的示例化与使用规则:

  1. 实例化格式:类模板名<类型1, 类型2, ..., 类型n> 变量名(构造参数);

  2. 使用要点:

    1. 必须为每个模板参数显式指定具体类型(除非有默认参数)

    2. 模板参数之间用逗号分隔,整体用尖括号<>包裹

    3. 类内部可以使用这些模板参数定义成员变量、函数参数或返回值类型

示例:

template<class KeyType, class ValueType>  // 两个模板参数:键类型和值类型
class MyPair { ... }

这里KeyTypeValueType是类型占位符,使用时需替换为具体类型。

实例化方式:

  1.   MyPair<int, std::string>:指定键为int类型,值为string类型

  1.   MyPair<std::string, double>:指定键为string类型,值为double类型

  1.   每个实例化都会生成一个独立的类(如MyPair<int, string>MyPair<string, double>是两个不同的类)

// 动态顺序表 
// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具 
template<class T> 
class Vector 
{  
public :  Vector(size_t capacity = 10) : _pData(new T[capacity]) , _size(0) , _capacity(capacity) {}    // 使用析构函数演示:在类中声明,在类外定义。  ~Vector();   void PushBack(const T& data);  void PopBack();  // ...    size_t Size() {return _size;}   T& operator[](size_t pos{  assert(pos < _size);  return _pData[pos]; } private:  T* _pData;  size_t _size; size_t _capacity; 
}; 
// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表 
template <class T> 
Vector<T>::~Vector() 
{  if(_pData)  delete[] _pData;  _size = _capacity = 0; 
}

1.2 类模板的实例化

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>

中即可,类模板名字不是真正的类,而实例化的结果才是真正的类

// Vector类名,Vector<int>才是类型 
Vector<int> s1; 
Vector<double> s2;

http://www.xdnf.cn/news/1396027.html

相关文章:

  • 基于Net海洋生态环境保护系统的设计与实现(代码+数据库+LW)
  • MYSQL速通(2/5)
  • 小杰机器视觉(six)——模板匹配
  • UCIE Specification详解(十)
  • TypeScript: Symbol.iterator属性
  • WINTRUST!_GetMessage函数分析之CRYPT32!CryptSIPGetSignedDataMsg函数的作用是得到nt5inf.cat的信息
  • AI的“科学革命”:Karpathy吹响号角,从“经院哲学”走向“实验科学”
  • 基于STM32单片机的智能温室控制声光报警系统设计
  • Geocodify 的 API
  • CD71.【C++ Dev】二叉树的三种非递归遍历方式
  • 网络编程 反射【详解】 | Java 学习日志 | 第 15 天
  • 2025牛客暑期多校训练营4 G Ghost in the Parentheses 题解记录
  • Day17 Docker学习
  • uac播放与录制
  • 论文阅读:arixv 2025 WideSearch: Benchmarking Agentic Broad Info-Seeking
  • React Three Fiber
  • LBM——大型行为模型助力波士顿人形Atlas完成多任务灵巧操作:CLIP编码图像与语义,之后DiT去噪扩散生成动作
  • 编程速递:RAD Studio 13 即将到来的功能
  • Linux 线程调度核心要点
  • Shell 脚本基础教程
  • java序列化
  • Android系统框架知识系列(十九):Android安全架构深度剖析 - 从内核到应用的全栈防护
  • python学习打卡day48
  • “白月光”焦点何晟铭现身宁夏中宁,助力非遗与三农发展
  • 拎包入住搭建 Browser Use Agent:基于PPIO Model API +Agent 沙箱的一体化构建
  • 变量声明方式
  • linux学习-数据库
  • 中科米堆CASAIM五金配件三维扫描测量尺寸形位公差
  • 嵌入式Linux驱动开发:i.MX6ULL平台设备驱动
  • 使用 Docker 部署 Squid 为 Kubernetes 中的 Nexus3 提供公网代理访问