C++类模板与泛型编程
C类模板与泛型编程类模板是C泛型编程的核心允许定义与类型无关的数据结构。模板在编译期实例化为每种类型生成专门的代码。类模板的基本定义使用template语法。#include#include#includetemplateclass Array {T* data_;size_t size_;public:explicit Array(size_t n) : data_(new T[n]()), size_(n) {std::cout Array of n elements\n;}~Array() { delete[] data_; }Array(const Array other) : data_(new T[other.size_]), size_(other.size_) {for (size_t i 0; i size_; i) data_[i] other.data_[i];}Array operator(const Array other) {if (this ! other) {T* new_data new T[other.size_];for (size_t i 0; i other.size_; i) new_data[i] other.data_[i];delete[] data_;data_ new_data;size_ other.size_;}return *this;}T operator[](size_t i) { return data_[i]; }const T operator[](size_t i) const { return data_[i]; }size_t size() const { return size_; }T* begin() { return data_; }T* end() { return data_ size_; }const T* begin() const { return data_; }const T* end() const { return data_ size_; }};void class_template_basic() {Array ints(5);for (size_t i 0; i ints.size(); i) ints[i] i * 10;for (int v : ints) std::cout v ;std::cout \n;Array doubles(3);doubles[0] 1.5;doubles[1] 2.5;doubles[2] 3.5;Array strings(2);strings[0] Hello;strings[1] World;}模板参数可以是类型、非类型或模板模板参数。templateclass FixedArray {T data_[N];public:T operator[](size_t i) { return data_[i]; }const T operator[](size_t i) const { return data_[i]; }constexpr size_t size() const { return N; }T* begin() { return data_; }T* end() { return data_ N; }};void non_type_params() {FixedArray arr;for (size_t i 0; i arr.size(); i) arr[i] i * i;for (int v : arr) std::cout v ;std::cout \n;std::cout Size: arr.size() \n;}模板特化为特定类型提供特殊实现。templateclass TypeProcessor {public:void process(T value) {std::cout Generic: value \n;}};templateclass TypeProcessor {public:void process(int value) {std::cout Specialized for int: value * 2 \n;}};templateclass TypeProcessor {public:void process(const std::string value) {std::cout String length: value.length() \n;}};void template_specialization() {TypeProcessor dp;dp.process(3.14);TypeProcessor ip;ip.process(42);TypeProcessor sp;sp.process(Hello);}类模板偏特化。templateclass Resource {public:void use() {std::cout Generic resource\n;}};templateclass Resource {T* ptr_;public:explicit Resource(T* p) : ptr_(p) {}~Resource() { delete ptr_; }T* operator-() { return ptr_; }T operator*() { return *ptr_; }void use() {std::cout Managed resource\n;}};templateclass Resource {T* ptr_;public:explicit Resource(T* p) : ptr_(p) {}T* operator-() { return ptr_; }T operator*() { return *ptr_; }};继承类模板。templateclass Base {protected:T value_;public:explicit Base(T v) : value_(v) {}virtual void show() { std::cout value_ \n; }};templateclass Derived : public Base {U extra_;public:Derived(T v, U e) : Base(v), extra_(e) {}void show() override {std::cout this-value_ , extra_ \n;}};void template_inheritance() {Derived d(42, answer);d.show();}模板成员函数。class Utils {public:templatestatic T max(T a, T b) {return a b ? a : b;}templatestatic T min(T a, T b) {return a b ? a : b;}};void template_members() {std::cout Max(3, 7): Utils::max(3, 7) \n;std::cout Min(3.14, 2.71): Utils::min(3.14, 2.71) \n;}类模板是STL的基础STL中的容器、迭代器和算法都是类模板的应用。

相关新闻

Django毕业设计-基于 Python 的员工管理系统的设计与实现 基于 Python 的企业人事员工管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)

Django毕业设计-基于 Python 的员工管理系统的设计与实现 基于 Python 的企业人事员工管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/19 12:41:11阅读更多 →
【LaTeX进阶】上标下标全解析:从基础语法到复杂数学公式排版实战

【LaTeX进阶】上标下标全解析:从基础语法到复杂数学公式排版实战

1. LaTeX上标下标基础语法详解 第一次用LaTeX写数学公式时,我被那些神秘的^和_符号搞晕了。直到把A^2打成A2才明白,原来这就是让字符"飞起来"的魔法钥匙。上标下标看似简单,但要用好它们,得先掌握几个核心要点。 最基本…

2026/6/19 12:41:11阅读更多 →
07 集成学习(Ensemble Learning)

07 集成学习(Ensemble Learning)

核心思想:三个臭皮匠,顶个诸葛亮 —— 多个弱学习器的组合,可以胜过单个强学习器。一、为什么需要集成学习?1.1 直观理解:群体智慧单个模型可能有偏见、过拟合或泛化能力不足。集成学习 构建并组合多个基学习器&#x…

2026/6/19 12:41:11阅读更多 →
grunt-nw-builder高级功能:实现Windows、Mac和Linux三平台同时打包的终极指南

grunt-nw-builder高级功能:实现Windows、Mac和Linux三平台同时打包的终极指南

grunt-nw-builder高级功能:实现Windows、Mac和Linux三平台同时打包的终极指南 【免费下载链接】grunt-nw-builder Build NW.js applications for Mac, Windows and Linux using Grunt 项目地址: https://gitcode.com/gh_mirrors/gr/grunt-nw-builder 想要一次…

2026/6/19 14:21:21阅读更多 →
MC9S12KG128内存映射控制(MMCV4)详解:突破64KB限制的嵌入式开发实战

MC9S12KG128内存映射控制(MMCV4)详解:突破64KB限制的嵌入式开发实战

1. 项目概述与核心价值在嵌入式开发,尤其是汽车电子和工业控制领域,MC9S12系列微控制器因其高可靠性和强大的实时性能而备受青睐。然而,随着应用复杂度的提升,一个核心挑战摆在了开发者面前:如何在有限的64KB线性地址空…

2026/6/19 14:21:21阅读更多 →
大模型转型攻略:小白程序员轻松入门,收藏这份从零到精通的学习指南!

大模型转型攻略:小白程序员轻松入门,收藏这份从零到精通的学习指南!

本文提供了一份详细的大模型领域转型攻略,帮助读者从零开始进入大模型领域。内容涵盖明确目标与方向、掌握编程语言与工具、数学基础、机器学习基础、深入学习大模型技术(Transformer架构、预训练与微调、大模型优化、大模型应用)、实践项目、…

2026/6/19 14:21:21阅读更多 →
还在手动处理微信消息?让PadLocal帮你解放双手

还在手动处理微信消息?让PadLocal帮你解放双手

还在手动处理微信消息?让PadLocal帮你解放双手 【免费下载链接】puppet-padlocal Puppet PadLocal is a Pad Protocol for WeChat 项目地址: https://gitcode.com/gh_mirrors/pu/puppet-padlocal 还在为每天处理海量微信消息而头疼吗?还在为重复性…

2026/6/19 14:21:21阅读更多 →
CANN/asc-devkit SIMD向量小于比较API

CANN/asc-devkit SIMD向量小于比较API

asc_lt 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/can…

2026/6/19 14:21:21阅读更多 →
终极指南:如何用Canvas编辑器解决传统富文本编辑器的5大痛点

终极指南:如何用Canvas编辑器解决传统富文本编辑器的5大痛点

终极指南:如何用Canvas编辑器解决传统富文本编辑器的5大痛点 【免费下载链接】canvas-editor A Canvas/SVG-based rich text editor 项目地址: https://gitcode.com/gh_mirrors/ca/canvas-editor 在医疗、法律、教育等专业领域,文档编辑需求往往超…

2026/6/19 14:16:20阅读更多 →
Photobucket付费墙背后:5美元买童年回忆却落得一场空!

Photobucket付费墙背后:5美元买童年回忆却落得一场空!

1. 付费墙初现如今身处万亿市值公司林立的时代,我们也不能轻易放弃5美元。就像Photobucket,它曾相当于过去的Imgur,我们小时候常把图片上传到这个网站,然后在各种论坛上分享链接,它简单好用,尽职尽责。但最…

2026/6/19 0:04:37阅读更多 →
如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…

2026/6/19 0:04:37阅读更多 →
yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南 【免费下载链接】yuzu 项目地址: https://gitcode.com/GitHub_Trending/yuz/yuzu yuzu作为目前最流行的开源Nintendo Switch模拟器,不仅提供了完整的游戏运行环境,还内…

2026/6/19 0:04:37阅读更多 →